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
प्रश्न का अंत पढ़ें। ;)
बीकेआर

6
इस जवाब से मुझे मदद मिली। मेरे मामले में, यह इसलिए था क्योंकि मैंने एक और हेडर फ़ाइल को हटा दिया था जिसमें फ़ॉस्टस्ट शामिल था। समाधान में फाल्ट को शामिल करना था।
एंड्रेस रिओप्रियो

12
और साथ भ्रमित मत करो <iostream>। ही <fstream>करेंगे।
जोकिम डब्ल्यू

9
यह प्रश्न बहुत अधिक स्थानीय नहीं है। इससे मुझे जो समस्या हो रही थी, वह ठीक बताई।
Syndog

4
उत्तर सहित ओपी के लिए +1। जब किसी अन्य देव के कोड को, जो बासी परियोजना के साथ बनाया गया था, विलय करने में मेरी मदद की, तो मुझे मर्ज के लिए नहीं भेजा गया। स्पष्ट रूप से बहुत अधिक स्थानीय या संकीर्ण नहीं।
केनिगमेटिक

जवाबों:


105

यह उत्तर दिया जा रहा है - #include <fstream>

संदेश का अर्थ है: -

incomplete type- वर्ग को पूर्ण वर्ग के साथ परिभाषित नहीं किया गया है। संकलक ने ऐसे बयान देखे हैं class ifstream;जो यह समझने की अनुमति देते हैं कि एक वर्ग मौजूद है, लेकिन यह नहीं जानता कि कक्षा कितनी मेमोरी लेती है।

आगे की घोषणा संकलक को अधिक समझ बनाने की अनुमति देती है: -

void BindInput( ifstream & inputChannel ); 

यह समझता है कि कक्षा मौजूद है, और कक्षा बनाने में सक्षम होने के बिना कोड के माध्यम से संकेत और संदर्भ भेज सकते हैं, कक्षा के भीतर कोई भी डेटा देख सकते हैं या कक्षा के किसी भी तरीके को कॉल कर सकते हैं।

has initializerथोड़ा बाहरी लगता है, लेकिन कह रही है कि अधूरा वस्तु बनाया जा रहा है।


7
मुझे विश्वास है कि आप का मतलब था #include <fstream>, नहीं#include <ifstream>
एलेक्स रयान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.