2011-01-30 69 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