C ++: 'std :: ifstream ifs' değişkeninin başlatıcısı var ancak türü eksik


139

Bu oldukça noobish ise üzgünüm, ama C ++ için oldukça yeniyim. Bir dosyayı açmaya ve kullanarak okumaya çalışıyorum 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;
}

Ancak, aşağıdaki hatayı alıyorum Nasıl düzelteceğimi tam olarak bilmiyorum:

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

Cevaplar çok takdir edildi. Unutmadım #include <fstream>, çünkü birçoğu sadece başlığı dahil etmeyi unuttuğu için hatayı aldı.

DÜZENLE:

Aslında eklemeyi fstreamunuttuğum ortaya çıkıyor, ancak işlevi başka bir dosyaya taşıma nedeniyle unuttum.


9
Sorunun sonunu okuyun. ;)
beakr

6
Bu cevap bana yardımcı oldu. Benim durumumda, çünkü fstream içeren başka bir başlık dosyasını kaldırdım. Çözüm fstream dahil etmekti.
Andres Riofrio

12
Ve karıştırmayın <iostream>. Sadece <fstream>yapacak.
Joachim W

9
Bu soru çok yerel değil. Bu tam olarak yaşadığım sorunu açıkladı.
Syndog

4
Cevap dahil OP için +1. Eski proje ile inşa edilmiş başka bir geliştiricinin kodunu birleştirirken bana birleştirme için gönderilmediğinde yardımcı oldu. Açıkça çok lokalize ya da dar değil.
Kenigmatic

Yanıtlar:


105

Bu cevaplanmış gibi görünüyor #include <fstream>.

Mesaj şu anlama gelir: -

incomplete type- sınıf bir tam sınıfla tanımlanmadı. Derleyici, class ifstream;bir sınıfın var olduğunu anlamasına izin veren ifadeler gördü , ancak sınıfın ne kadar bellek kapladığını bilmiyor.

Ön deklarasyon derleyicinin daha anlamlı olmasını sağlar:

void BindInput( ifstream & inputChannel ); 

Sınıfın var olduğunu anlar ve sınıf oluşturamadan, sınıf içindeki herhangi bir veriyi görmeden veya sınıfın herhangi bir yöntemini çağırmadan kod aracılığıyla işaretçiler ve referanslar gönderebilir.

has initializerBiraz konu dışı gibi görünüyor, ama eksik nesne oluşturulurken söylüyor.


7
Kastettiğine eminim #include <fstream>, değil#include <ifstream>
Alex Ryan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.