2013-02-26 33 views
89

申し訳ありませんが、これはかなり汚いですが、私は、ファイルを開いて、ifstreamを使用して、それを読むためにしようとしている:C++:変数 'std :: ifstream ifs'にイニシャライザがありますが、型が不完全です

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>を忘れたことはありません。ヘッダーを含めることを忘れてエラーを受けた人が多いためです。

EDIT:

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

+7

質問の最後を読んでください。 ;) – beakr

+0

あなたはどちらか1)ans – Pubby

+6

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

答えて

49

これは答えられると思われる - #include <fstream>

メッセージの意味: -

incomplete type - クラスは、完全なクラスで定義されていません。コンパイラはclass ifstream;のような文を見て、クラスが存在することを理解できるようにしますが、クラスがどれくらいのメモリを占めるかは分かりません。

前方宣言は、コンパイラがより多くの意味を理解することができます: -

void BindInput(ifstream & inputChannel); 

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

has initializerは多少余計なようですが、不完全なオブジェクトが作成されていると言います。

+2

あなたが '#include 'を意味していると確信しています。 '#include ' –

関連する問題