2016-11-15 16 views
0

私はC++が新しく、数字のファイルから行を読み込み、行を文字列配列にトークン化して変換しようとしていますそれらの配列項目を倍精度の数値に変換します。しかしトークン化の過程で私はこのエラーを受け取ります。 ''変数 '' std :: stringstream mystream 'に初期化子がありますが、不完全な型' 'があります。私は他の人の提案を見てきましたが、私はブーストを使わずにそれをやりたいのですが、残りのコードは私のように見えますが、なんらかの理由でエラーが発生します。ここにコードがあります。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を完成させるには、fooの定義を含める必要があります。

あなたの場合、foostd::stringstreamです。 std::stringstreamの定義は含まれていないため、完全な型ではありません。実際、宣言されていることさえ保証されていない可能性もあります。他のヘッダーのいずれかによって宣言されているだけです。

解決方法:std::stringstreamを定義するヘッダーを含めます。すべてのヘッダーと、標準で定義されているタイプを見つけることができます。これはオンラインで自由にドラフトとして入手できます。しかし、秒針仕様を気にしなければ、コミュニティで管理されているC++リファレンスWebサイトにアクセスしやすくなるかもしれません。

1

私はあなたのヘッダーに

#include <sstream> 

を忘れてしまったと思います。

関連する問題