2011-01-30 8 views
0

に、私はこのような何かをstringstreamを使用しようとしています(私は、エラーを特定するために私のコードを簡素化):にstringstream ::構文エラー

Token.h

#include <stdio.h> 
#include <vector> 
#include <sstream> 

using namespace std; 

class Token { 
public: 
    static stringstream ss (stringstream::in | stringstream::out); 
    static void set_input_string(std::string str); 
}; 

トークン

#include "Token.h" 

void Token::set_input_string(std::string str) 
{ 
    ss << str; 
} 

私は私が手コンパイルしようと.cppファイル: ラインstatic stringstream ss (stringstream::in | stringstream::out);とビジュアルスタジオ2010 Token.hでは赤stringstream::in |

+0

クラスは本当にトークンを表していますか、入力文字列を切り詰めて**トークンを生成していますか?後者の場合は、(a)それを反映するようにクラス名を修正し、(b)静的メンバーを使用しないようにする必要があります。実際にトークンを表している場合は、その値をコンストラクタに設定し、stringstreamをコンストラクタに渡す必要があります(ストリームからデータを抽出するためにそこで作業を行います)。 –

答えて

3

あなたはクラス定義で非整数値を初期化することはできませんで強調しています。あなたは持っている必要があります。

// Token.h 
#include <cstdio> // thisis the C++ header 
#include <vector> 
#include <sstream> 

// don't do this, especially not in a header file - function-scope at best 
// using namespace std; 

class Token { 
public: 
    static std::stringstream ss; // declare 

    // probably want this parameter to be a const-reference 
    static void set_input_string(std::string str); 
}; 

そして:

// Token.cpp 
#include "Token.h" 

// define 
std::stringstream Token::ss(std::stringstream::in | std::stringstream::out); 

void Token::set_input_string(std::string str) 
{ 
    ss << str; 
} 
1

あなたは同時にメンバ変数を宣言して定義することはできません。 ssの定義は、クラス宣言の外になければなりません。

class Token { 
public: 
    static stringstream ss; // declaration 
    static void set_input_string(std::string str); 
}; 

stringstream Token::ss (stringstream::in | stringstream::out); // definition in your cpp file