C ++: variabel 'std :: ifstream ifs' memiliki penginisialisasi tetapi jenisnya tidak lengkap


147

Maaf jika ini sangat noobish, tapi saya cukup baru mengenal C ++. Saya mencoba membuka file dan membacanya menggunakan 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;
}

Namun, saya mendapatkan kesalahan berikut, saya tidak yakin bagaimana cara memperbaikinya:

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

Jawaban sangat dihargai. Perhatikan bahwa saya tidak pernah lupa #include <fstream>, karena banyak yang mendapatkan kesalahan karena lupa menyertakan header.

EDIT:

Ternyata saya benar-benar lupa untuk memasukkannya fstream, tapi saya lupa karena memindahkan fungsi ke file lain.


9
Baca akhir pertanyaannya. ;)
paruh

6
Jawaban ini membantu saya. Dalam kasus saya, itu karena saya menghapus file header lain yang menyertakan fstream. Solusinya adalah memasukkan fstream.
Andres Riofrio

13
Dan jangan bingung dengan <iostream>. Hanya <fstream>akan dilakukan.
Joachim W

9
Pertanyaan ini TIDAK terlalu terlokalisasi. Ini menjelaskan dengan tepat masalah yang saya alami.
Syndog

4
1 untuk OP termasuk jawabannya. Membantu saya saat menggabungkan kode pengembang lain yang dibangun dengan proyek basi termasuk tidak dikirim kepada saya untuk digabungkan. Jelas tidak terlalu terlokalisasi atau sempit.
Kenigmatic

Jawaban:


112

Ini sepertinya dijawab - #include <fstream>.

Pesan itu berarti: -

incomplete type- kelas belum ditentukan dengan kelas lengkap. Kompilator telah melihat pernyataan seperti class ifstream;yang memungkinkannya untuk memahami bahwa suatu kelas ada, tetapi tidak mengetahui berapa banyak memori yang digunakan kelas tersebut.

Deklarasi maju memungkinkan kompilator untuk lebih memahami: -

void BindInput( ifstream & inputChannel ); 

Ia memahami bahwa kelas itu ada, dan dapat mengirim petunjuk dan referensi melalui kode tanpa dapat membuat kelas, melihat data apa pun di dalam kelas, atau memanggil metode kelas apa pun.

The has initializertampaknya asing sedikit, tetapi mengatakan bahwa obyek yang tidak lengkap sedang dibuat.


8
Saya yakin maksud Anda #include <fstream>, bukan#include <ifstream>
Alex Ryan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.