c++ - "!"对绑定(bind)成员函数表达式的非法操作

标签 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;
         }

     }

最佳答案

解决方法:

 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];

执行:

  • 从流中获取整数并设置到元素中

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

  • 返回ostream&

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

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

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

在循环结束时,i 将对您的元素进行计数。

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

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

关于c++ - "!"对绑定(bind)成员函数表达式的非法操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614126/

相关文章:

objective-c - 如何从文件中截断 x 字节

c++ - 在#include <cstdint> 之后使用类型的 Clang++ -fmodules 错误

c++ - 找到与另一个二进制模式匹配的所有 2 位值,然后将它们相加

c++ - std::vector<float> 成员的 boost 序列化/反序列化失败

c++ - 完整性检查 - 当容器本身死亡时,每个新对象的 STL::Container 是否会被删除?

javascript - 如何读取非英文字符,如: "Ä,ö" from file in node. js

c++ - 使用用户输入动态更改控制台

Java 加密不会在 Android 上解密

php - 带有特殊字符的文件名,如 "é"NOT FOUND

javascript - 使用ajax下载文件