stringstream :: в синтаксической ошибке - PullRequest
0 голосов
/ 30 января 2011

Я пытаюсь использовать 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);
};

Token.cpp

#include "Token.h"

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

Когда я пытаюсь скомпилировать, я получаю: error C2061: syntax error : identifier 'in' в Token.h on line static stringstream ss (stringstream::in | stringstream::out); и Visual Studio 2010 подчеркивается красным stringstream::in |

Ответы [ 2 ]

3 голосов
/ 30 января 2011

Вы не можете инициализировать нецелые значения в определении класса. Вы должны иметь:

// 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 голос
/ 30 января 2011

Вы не можете одновременно объявлять и определять переменную-член. Определение 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
...