164

これがかなり初心者の場合は申し訳ありませんが、私はC ++にかなり慣れていません。ファイルを開いて、次を使用して読み取ろうとしていますifstream:

vector<string> load_f(string file) {
  vector<string> text;

  ifstream ifs(file);
  string buffer, str_line;

  int brackets = 0;
  str_line = "";

  while ( getline(ifs, buffer) ) {
    buffer = Trim( buffer );
    size_t s = buffer.find_first_of("()");

    if (s == string::npos) str_line += "" + buffer;
    else {
      while ( s != string::npos ) {
        str_line += "" + buffer.substr(0, s + 1);
        brackets += (buffer[s] == '(' ? 1 : -1);

        if ( brackets == 0 ) {
          text.push_back( str_line );
          str_line = "";
        }

        buffer = buffer.substr(s + 1);
        s = buffer.find_first_of("()");
      }
    }
  }

  return text;
}

ただし、次のエラーが表示されます。修正方法がよくわかりません。

variable 'std::ifstream ifs' has initializer but incomplete type

回答は非常に高く評価されています。#include <fstream>多くの人がヘッダーを含めるのを忘れただけでエラーが発生したため、忘れたことはありません。

編集:

実際には を含めるfstreamのを忘れていたことが判明しましたが、関数を別のファイルに移動したために忘れていました。

4

1 に答える 1

138

これは答えられているようです - #include <fstream>

メッセージの意味:-

incomplete type- クラスは完全なクラスで定義されていません。コンパイラはclass ifstream;、クラスが存在することは理解できるが、クラスがどれだけのメモリを消費するかを認識していないなどのステートメントを見てきました。

前方宣言により、コンパイラは次のことをより理解できるようになります:-

void BindInput( ifstream & inputChannel ); 

クラスが存在することを理解し、クラスを作成したり、クラス内のデータを表示したり、クラスのメソッドを呼び出したりすることなく、コードを介してポインターと参照を送信できます。

少し無関係にhas initializer思えますが、不完全なオブジェクトが作成されていると言っています。

于 2015-09-18T14:26:02.867 に答える