2011-01-30 70 views
0

我試圖用一個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); 
}; 

令牌的.cpp

#include "Token.h" 

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

當我嘗試編譯我得到: error C2061: syntax error : identifier 'in' Token.h行static stringstream ss (stringstream::in | stringstream::out);和視覺工作室2010強調紅色stringstream::in |

+0

是否真的類代表一個令牌,或者通過切割輸入字符串做它** **產生令牌?如果是後者,你應該(a)修正類名以反映這一點,並且(b)不使用「靜態」成員。如果它真的代表一個令牌,那麼你應該在構造函數中設置它的值,並將stringstream傳遞給構造函數(讓它在那裏完成從流中提取數據的工作)。 – 2011-01-30 09:23:55

回答

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