1

std ::ifstreamfilestrメンバーを持つクラスAがあります。クラス関数の1つで、ストリームがeofに到達したかどうかをテストします。

class A
{
private:
   std::ifstream filestr;

public:
   int CalcA(unsigned int *top);  
}

次に、cppファイルに

int CalcA(unsigned int *top)
{
   int error;
   while(true)
   {
      (this->filestr).read(buffer, bufLength);

      if((this->filestr).eof);
      {
         error = 1;
         break;
      }
   }
   return error;
}

コンパイルエラーが発生します

error: argument of type ‘bool (std::basic_ios<char>::)()const’ does not match ‘bool’

誰かがeofを正しく使用する方法を教えてもらえますか?または、このエラーが発生するその他の理由はありますか?

4

3 に答える 3

6

eofは関数であるため、他の関数と同様に呼び出す必要がありますeof()

とは言うものの、与えられた読み取りループは、を呼び出さなくても(ファイルの終わり以外の失敗の可能性を考慮して)より正確eof()に書き込むことができますが、読み取り操作をループ条件に変えます。

while(filestr.read(buffer, bufLength)) {
    // I hope there's more to this :)
};
于 2012-09-03T18:46:54.817 に答える
1

(this->filestr).eof関数を呼び出していません。(this->filestr).eof()は。:-)これはあなたのエラーを説明しています。

于 2012-09-03T18:49:12.220 に答える
1

試す

if(this->filestr).eof())

(this->filestr).eof単独でメンバーメソッドへのポインタです。ifステートメントには、タイプの拡張子が必要ですbool。したがって、メソッドを呼び出す必要があります。値を返すので成功しboolます。

于 2012-09-03T18:47:22.860 に答える