"!"绑定成员函数表达式的非法操作

时间:2014-05-12 16:23:20

标签: c++ file

我正在课堂上阅读我的文件,当我执行以下操作时,它会给我错误。请建议任何解决方案。

void write2file (string water)
{
    ofstream write;
    write.open ("D:\\Assignments\Water.txt", ios::out|ios::app);
    {
        write<<water<<endl;

    }
    write.close();

}


     void DisplayW ()
     {
         ifstream read ("D:\\Assignments\Water.txt", ios::in|ios::app);

         while (!read.eof) //ERROR at this point//
         {
             read >> Elements[i];
             cout<<"Elements are: "<<Elements[i]<<endl;
         }

     }

4 个答案:

答案 0 :(得分:2)

解决方案:

 void DisplayW ()
 {
     ifstream read ("D:\\Assignments\\Water.txt", ios::in|ios::app);

     // while (!read.eof) //ERROR at this point//
     // better:
     while(!read.eof()) // I think this is what you intended to write
     {
         read >> Elements[i];
         cout<<"Elements are: "<<Elements[i]<<endl;
     }
 }

更好的解决方案:

    i = 0;
    while(read >> Elements[i++]);

说明:

    read >> Elements[i];

执行:

  • 从流中获取int并设置为元素

  • 根据操作成功设置i / o状态

  • 返回ostream&amp;

            i++;
    
  • 前进到下一个要阅读的元素;

    while( [[returned ostream&]] )
    
  • 将ostream转换为boolean;这将检查ostream状态(基于操作成功的i / o状态)和eof位,如果两者都可以,则返回true。

  • while计算结果为true并读入下一个索引。

在循环结束时,i会计算您的元素。

基于您的代码的解决方案:

i = 0;
while(read >> Elements[i])
    cout<<"Elements are: "<<Elements[i++]<<endl; // note i++ as
                                                 // the last operation

答案 1 :(得分:1)

你错过了函数调用语法。

使用

     while (!read.eof())

而不是

     while (!read.eof)

答案 2 :(得分:1)

.eof是会员功能。你必须打电话。

while (!read.eof())

答案 3 :(得分:0)

错误告诉您正在尝试在成员函数上使用!。您可能打算在调用成员函数的结果上使用它:

while (!read.eof())