C ++: ভেরিয়েবল 'std :: ifstream ifs' এর প্রারম্ভিক তবে অসম্পূর্ণ প্রকার রয়েছে


139

দুঃখিত এটি যদি খুব দু: খিত হয় তবে আমি সি ++ তে বেশ নতুন। আমি একটি ফাইল খুলতে এবং এটি ব্যবহার করে পড়ার চেষ্টা করছি 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
এই উত্তরটি আমাকে সাহায্য করেছিল। আমার ক্ষেত্রে, এটি এমন ছিল কারণ আমি অন্য একটি শিরোলেখ ফাইলটি সরিয়ে দিয়েছি যার মধ্যে fstream অন্তর্ভুক্ত রয়েছে। সমাধানটি fstream অন্তর্ভুক্ত ছিল।
আন্দ্রেস রিওফ্রিও

12
এবং সাথে বিভ্রান্ত করবেন না <iostream>। শুধু <fstream>করবে।
জোছিম ডাব্লু

9
এই প্রশ্নটি খুব স্থানীয় নয়। এটি আমার যে সমস্যাটি ছিল ঠিক ঠিক তা ব্যাখ্যা করেছিল।
সিন্ডোগ

4
উত্তর সহ ওপির জন্য +1। বাসি প্রকল্পের সাথে নির্মিত অন্য কোনও দেবের কোডটি মার্জ করার জন্য আমাকে প্রেরণ করা না হলে আমাকে সহায়তা করেছিল। স্পষ্টতই খুব স্থানীয় বা সংকীর্ণ নয়।
কেনিগাম্যাটিক

উত্তর:


105

এই উত্তর দেওয়া হয় বলে মনে হচ্ছে - #include <fstream>

বার্তার অর্থ: -

incomplete type- ক্লাসটি একটি পূর্ণ শ্রেণীর সাথে সংজ্ঞায়িত করা হয়নি। সংকলকটি এমন বিবৃতি দেখেছিল class ifstream;যা এটি বুঝতে পারে যে কোনও শ্রেণি বিদ্যমান, তবে ক্লাসটি কতটা স্মৃতি গ্রহণ করে তা জানে না।

ফরোয়ার্ড ঘোষণাটি সংকলকটিকে আরও বেশি বোঝার সুযোগ দেয়: -

void BindInput( ifstream & inputChannel ); 

এটি ক্লাসের উপস্থিতি বোঝে এবং ক্লাস তৈরি করতে সক্ষম না হয়ে কোডের মাধ্যমে পয়েন্টার এবং রেফারেন্স প্রেরণ করতে পারে, শ্রেণীর মধ্যে কোনও ডেটা দেখতে বা শ্রেণীর কোনও পদ্ধতিতে কল করতে পারে।

দেখে has initializerমনে হচ্ছে কিছুটা বাহ্যিক, তবে বলছে যে অসম্পূর্ণ বস্তু তৈরি হচ্ছে।


7
আমি আত্মবিশ্বাসী আপনি বোঝাতে চেয়েছিলেন #include <fstream>, তা নয়#include <ifstream>
অ্যালেক্স রায়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.