불완전한 유형은 허용되지 않습니다 : stringstream


109

이 줄에서 오류가 발생하는 이유는 무엇 Error: incomplete type is not allowed입니까?

stringstream ss;

어떤 헤더 파일을 포함 시켰습니까?
Alan Stokes

내가 #include<stringstream>사용 했어야 할 것이 있었는지 추측하고 있습니까? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10

답변:


210

#include <sstream> 정규화 된 이름을 사용합니다. std::stringstream ss;


이 오류는 아마도 stringstream이 정의되지 않은 일반 유형으로 정의되어 있기 때문일 것입니다.
mireazma

나는 Visual Studio가 때때로 파일을 포함하지 않고 stringstream을 사용할 수 있다고 생각합니다. 어쩌면이 오류의 원인은
FindOutIslamNow

40

일부 시스템 헤더 std::stringstream는 정의없이 포워드 선언을 제공합니다 . 이것은 그것을 '불완전한 유형'으로 만듭니다. 수정하려면 <sstream>헤더에 제공된 정의를 포함해야합니다 .

#include <sstream>

17

incomplete type컴파일러 그것은 (예를 들면 순방향 선언 본 때문에 그것이 알고 식별자의 사용은 예를 들면, 유형 발생하면 에러가 class stringstream;),하지만 그것에 대한 전체 정의 보지있다 ( class stringstream { ... };).

이는 자신의 코드에서 사용하지 않았지만 포함 된 헤더 파일을 통해서만 존재하는 유형에 대해 발생할 수 있습니다. 유형을 사용하는 헤더 파일을 포함했지만 유형이 정의 된 헤더 파일은 포함하지 않은 경우입니다. 헤더가 필요한 모든 헤더를 포함하지 않는 것은 드문 일이지만 불가능하지는 않습니다.

stringstream클래스 와 같은 표준 라이브러리의 항목 에 대해서는 클래스 또는 개별 함수 (예 : Unix man페이지, MSDN 라이브러리 등)에 대한 언어 표준 또는 기타 참조 문서 #include를 사용하여 사용하는 데 필요한 사항 과 무엇을 파악해야합니다. 네임 스페이스에서 찾을 수 있습니다. 클래스 이름이 나타나는 페이지를 검색해야 할 수도 있습니다 (예 :) man -k stringstream.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.