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
질문의 끝을 읽으십시오. ;)
beakr

6
이 답변이 도움이되었습니다. 필자의 경우 fstream을 포함하는 다른 헤더 파일을 제거했기 때문입니다. 해결책은 fstream을 포함하는 것이 었습니다.
Andres Riofrio 16:25에

12
그리고와 혼동하지 마십시오 <iostream>. 만 <fstream>할 것입니다.
Joachim W

9
이 질문은 너무 현지화되지 않았습니다. 이것은 내가 겪고있는 문제를 정확하게 설명했습니다.
Syndog

4
답변을 포함하여 OP의 경우 +1 오래된 프로젝트로 빌드 된 다른 개발자 코드를 병합 할 때 병합을 위해 나에게 보내지 않았습니다. 분명히 너무 국지적이거나 좁지 않습니다.
Kenigmatic 2016 년

답변:


105

이것은 답변이 된 것 같습니다 #include <fstream>.

메시지 의미 :-

incomplete type-클래스가 전체 클래스로 정의되지 않았습니다. 컴파일러는 class ifstream;클래스가 존재한다는 것을 이해할 수는 있지만 클래스가 차지하는 메모리 양을 알지 못하는 명령문을 보았습니다 .

정방향 선언은 컴파일러가 다음을 더 잘 이해할 수 있도록합니다.

void BindInput( ifstream & inputChannel ); 

클래스가 존재한다는 것을 이해하고 클래스를 만들거나 클래스 내의 데이터를 보거나 클래스의 메서드를 호출하지 않고도 코드를 통해 포인터와 참조를 보낼 수 있습니다.

has initializer약간의 외부를 보이지만, 불완전한 객체가 생성되고 있음을 말하고있다.


7
당신이 #include <fstream>아니라고 확신합니다#include <ifstream>
Alex Ryan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.