2016-11-15 2 views
0

저는 C++을 처음 사용하고 숫자가있는 파일에서 행을 읽으려고 시도하고 문자열 배열로 행을 토큰 화하고 변환합니다. 이러한 배열 항목을 배정 밀도 숫자로 변환합니다. 하지만 토큰 화 과정에서이 오류가 발생합니다. ''변수 'std :: stringstream mystream'에는 초기화 도구가 있지만 불완전한 유형이 있습니다. 나는 다른 사람들의 제안을 보았고 나는 부스트를 사용하지 않고 그것을하고 싶다. 나머지 코드는 거의 마치 나의 것처럼 보인다. 그러나 나는 어떤 이유로 그 오류를 얻는다. 여기에 코드가 있습니다.C++ 토큰 화기 ''variable '에 오류가 있습니다. std :: stringstream mystream에 초기화가 있지만 불완전한 형식이 있습니다.' '

#include <stdio.h> 
#include <string.h> 
#include <string> 
#include <vector> 
#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    vector<string> tokens; 
    string phrase="sdfs sdfs trt we rw"; 
    stringstream mystream (phrase); 
    string temp; 

    while(getline(mystream,temp,' ')){ 
     tokens.push_back(temp); 
    } 
} 

이 문제에 대한 의견을 얻는 것이 좋습니다. 미리 감사드립니다.

+5

['std :: stringstream'] (http://en.cppreference.com/w/cpp/io/basic_stringstream)에 대한 올바른 헤더를 포함하지 마십시오. –

+1

문자열 스트림에서만 읽는 경우 관련이없는 메모에서 –

+2

대신 ['std :: istringstream'] (http://en.cppreference.com/w/cpp/io/basic_istringstream)을 사용하십시오. 마지막으로, 루프가 필요 없습니다. 필요한 것은 ['std :: istream_iterator'] (http://en.cppreference.com/w/cpp/iterator/istream_iterator)와 ['std :: vector' 생성자] (http : // en.cppreference.com/w/cpp/container/vector/vector). 반복자 쌍을 취하는 벡터 생성자에 주목하십시오. –

답변

0

이 오류는 변수 bar는 유형 (foo)을 완료해야 같은 방법으로 사용되었다는 것을 의미

"변수 'foo는 바는'초기화하지만 불완전한 유형이 있습니다." 단순히 선언되었지만 정의되지 않은 유형은 불완전합니다. 따라서 foo을 완성하려면 foo의 정의를 포함해야합니다.

귀하의 경우 foostd::stringstream입니다. std::stringstream의 정의가 포함되어 있지 않으므로 완전한 유형이 아닙니다. 실제로 선언 된 것조차도 보장되지 않을 수도 있습니다. 다른 헤더 중 하나에서 선언 된 것입니다.

해결 방법 : std::stringstream을 정의하는 헤더를 포함하십시오. 모든 머리글과 표준에서 정의하는 유형을 찾을 수 있으며 온라인에서는 자유롭게 초안으로 사용할 수 있습니다. 그러나 중고품을 신경 쓸 필요가 없다면 커뮤니티에서 관리하는 C++ 참조 웹 사이트에 더 쉽게 액세스 할 수 있습니다.

1

나는 당신이 당신의 헤더에

#include <sstream> 

을 잊었다 생각합니다.

관련 문제