标题:表达式必须包含bool类型(或可转换成bool)
只看楼主
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
结帖率:88.89%
已结贴  问题点数:2 回复次数:12 
表达式必须包含bool类型(或可转换成bool)
ofstream outfile;
    string filename;
    cout<<"Please enter a file name:";
    cin>>filename;

if(!outfile.open("filename",ios::binary))
老说outfile"表达式必须包含bool类型(或可转换成bool)",是怎么回事呢??
搜索更多相关主题的帖子: ios 表达式 
2012-12-13 20:29
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
outfile.open  看下他的返回值的类型是否是bool

DO IT YOURSELF !
2012-12-13 20:31
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
得分:0 
C++刚学到读写文件,还真不怎么懂,以下是完整子函数
void savedata(Student*s[],int n)
{
    ofstream outfile;
    string filename;
    int i;
    cout<<"Please enter a file name:";
    cin>>filename;
    if(!outfile.open("filename",ios::binary))
    {
        cerr<<"Open file error!"<<endl;
        getch();
        exit(1);
    }
    for(i=0;i<n;i++)
        outfile.write((char*)s[i],sizeof(s));
    outfile.close();

}



如果改成这样就不会报错
outfile.open("filename",ios::binary);
if(!outfile)
     {
        cerr<<"Open file error!"<<endl;
        getch();
        exit(1);
    }


[ 本帖最后由 锋了 于 2012-12-13 21:01 编辑 ]
2012-12-13 20:36
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
得分:0 
没人回答吗??
2012-12-13 22:06
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
if(!outfile.open("filename",ios::binary))
--- outfile.open的返回类型是void,你 if( !void ) 是何意思?

看3楼代码,我强烈建议你先歇歇,忘掉已学的错误知识,然后换书换老师。
虽然我的建议可能令你不快,但良药苦口,在错误的道路上学废了更可惜
2012-12-14 08:59
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
得分:0 
回复 5楼 rjsp
版主,三楼就是我啊!
按照版主意思是我的书有问题咯,我先在用的是谭浩强编著的,他编的书可以用吗?
2012-12-14 10:07
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
得分:0 
版主已经解释清楚了  

open
语法:
  void open( const char *filename );
  void open( const char *filename, openmode mode );

对于文件的打开 可以看如下:

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-12-14 10:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:2 
谭浩强是为了大陆C/C++作出巨大贡献的人,在缺乏学习和参考资料的年代,凭着摸索和猜测写出了C/C++教科书
但猜测毕竟不标准,闭门造车容易走上歪路。我建议你怀着对谭浩强的敬意的同时选择一本不是谭浩强编写的书籍

void savedata(Student*s[],int n)
------ Student*s[]估计是你手误,应该是 Student s[] 或 Student* s;但如果不是手误,那就有问题,滥用指针是Javar的标准行为(虽然Java不叫“指针”,并说Java没有指针),但却是C++中的陋习
------ n使用int类型不好,应当为size_t。原因有两点 a. n不可能不应该为负值; b. 对于尺寸,为了确保可移植性,不应该使用不确定类型

将函数中需要的变量在函数开始处声明,是一种古老的不合时宜的做法(当初CPU速度慢,为了加快编译速度才不得不如此规定),在C++中,包括现在的C中,不建议你这么做,尤其是在C++中,某些场合甚至无法这么做。应当在需要的时刻才定义变量,即
    cout<<"Please enter a file name:";
    string filename;
    cin>>filename;
    ofstream outfile( filename, ios::binary );
    if( outfile )
        ……
    for( int i=; ……

open("filename" 估计是你手误,应当是 open( filename

cerr 是不带缓冲的,不需要flush,所以应当是 cerr<<"Open file error!\n";

程序运行结束前写 getch() 是一种陋习(如果仅仅是为了调试,那当然可以),没有哪个控制台程序,包括控制台命令,需要按一键才退出。
   
不要用exit(只是一般情况下),一个合格的代码应当将错误状态返回给调用者,而不是自己一抹脖子就自杀了。尤其是在C++中,C++中还需要调用析构函数

将输入文件名这个动作,和保存文件这个动作放在同一个函数中是不良设计。保存文件是一个固定的动作,但获取文件名可能是从控制台输入,可能是从配置文件获得,可能来自于网络……

i++ 当写成 ++i,你得明白这两者的区别,虽然对于这种内建类型,编译器会优化得一样。但“返回原先的值”对你的代码逻辑而言是没必要的,没必要的就不应当存在

最后,我只是泛泛而谈,很多地方没有解释为什么,估计你看得也稀里糊涂,但你迟早会遇到,自然而然的懂的
2012-12-14 10:57
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
得分:0 
回复 8楼 rjsp
版主威武啊!
2012-12-14 20:51
bccn_82
Rank: 2
等 级:论坛游民
帖 子:23
专家分:80
注 册:2011-5-12
得分:0 
版主V5啊!
2012-12-14 22:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-391149-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.157290 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved