2016-11-15 23 views
0

我是新來的c + +,我試圖從數字文件中讀取行,將行標記爲字符串數組並將其轉換這些數組項目轉換爲雙精度數字。但在標記的過程中,我得到這個錯誤''變量'std :: stringstream mystream'有初始化,但不完整的類型''。我見過其他人的建議,我想不使用boost,其餘的代碼看起來很像我的,但出於某種原因我得到了這個錯誤。這是代碼。C++ tokenizer中的錯誤'變量'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

在不相關的說明中,如果您只是從字符串流中讀取數據,請考慮使用['std :: istringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream), –

+2

最後,順便說一句,你不需要循環。所有你需要的是['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的定義。

在你的情況下,foostd::stringstream。你沒有包含std::stringstream的定義,所以它不是一個完整的類型。事實上,它可能沒有保證它甚至被宣佈 - 它恰好已經被其他標題之一聲明。

解決方案:包含定義std::stringstream的標題。您可以在標準中找到所有標題和它們定義的類型,這些標題可以在網上免費下載。但是,如果您不介意二手規格,您可能會發現社區維護的C++參考網站更易於訪問。

1

我想你忘記了

#include <sstream> 
在你的頭

相關問題