2011-01-30 5 views
0

Je suis en train d'utiliser un stringstream faire quelque chose comme ça (j'ai simplifié mon code pour identifier l'erreur):stringstream :: erreur de syntaxe

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); 
}; 

Token cpp

#include "Token.h" 

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

Lorsque je tente de compiler je reçois: error C2061: syntax error : identifier 'in' dans Token.h sur la ligne static stringstream ss (stringstream::in | stringstream::out); et les studios Visual 2010 soulignés en rouge stringstream::in |

+0

Est-ce que la classe représente vraiment un jeton, ou est-ce que ** produit ** jetons en coupant la chaîne d'entrée? Si c'est le dernier, vous devriez (a) corriger les noms de classe pour refléter cela, et (b) ne pas utiliser un membre 'static'. Si cela représente vraiment un jeton, alors vous devriez définir sa valeur dans le constructeur, et passer le train de chaînes au constructeur (laissez-le faire le travail pour extraire les données du flux). –

Répondre

3

Vous ne pouvez pas initialiser des valeurs non-entières dans la définition de classe. Vous devriez avoir:

// 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); 
}; 

Et:

// 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

Vous ne pouvez pas déclarer et définir une variable membre en même temps. La définition de ss devrait être en dehors de la déclaration de la classe:

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