C ++:変数 'std :: ifstream ifs'に初期化子がありますが、型が不完全です


139

これがかなりうるさい場合は申し訳ありませんが、私は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を忘れたことがわかりましたが、関数を別のファイルに移動したために忘れていました。


9
質問の最後を読んでください。;)
ビーカー2013

6
この答えは私を助けました。私の場合は、fstreamを含む別のヘッダーファイルを削除したためです。解決策はfstreamを含めることでした。
Andres Riofrio 2014年

12
と混同しないでください<iostream>。するだけ<fstream>です。
ヨアヒムW

9
この質問はあまりにもローカライズされていません。これは私が抱えていた問題を正確に説明しています。
Syndog、2014

4
回答を含むOPの+1。古いプロジェクトインクルードでビルドされた別の開発者のコ​​ードをマージするときに、マージのために送信されないのを助けました。明らかにあまりにもローカライズまたは狭くありません。
Kenigmatic

回答:


105

これは回答されたようです- #include <fstream>

メッセージの意味:-

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

前方宣言により、コンパイラーは次のことをより理解することができます。

void BindInput( ifstream & inputChannel ); 

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

has initializer少し余分なようだが、不完全なオブジェクトが作成されていると言っています。


7
私はあなたがそう#include <fstream>ではなかったと確信しています#include <ifstream>
Alex Ryan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.