stringstream导致链接错误?

时间:2011-10-14 00:04:33

标签: c++ std

我有以下课程:

#ifndef CGE_NET_MESSAGE_PARSER_HPP
#define CGE_NET_MESSAGE_PARSER_HPP
#include "Game/platform.hpp"
#include <vector>
#include <string>
#include <sstream>

namespace cge
{
    class NetMessageParser
    {
        static std::stringstream ss;
        static void clearStream();
    public:
        NetMessageParser(void);
        static int parseInt(const std::string &str);
        static float parseFloat(const std::string &str);
        static double parseDouble(const std::string &str);
        static std::vector<int> parseIntVectorString(
            std::string str, char startKey, char endKey, char separator);
        static std::string numberToString(int n);
        static std::string numberToString(float n);
        static std::string numberToString(double n);
        virtual ~NetMessageParser(void);
    };

}
#endif

会产生以下链接器错误:

  

错误3错误LNK2001:未解析的外部符号“private:static   class std :: basic_stringstream,class   std :: allocator&gt; CGE :: NetMessageParser :: SS”   (?ss @ NetMessageParser @ cge @@ 0V?$ basic_stringstream @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ A)NetMessageParser.obj

可能出现什么问题?

2 个答案:

答案 0 :(得分:3)

您还必须在类之外定义静态成员,否则它们将被视为外部成员。加上这个:

static std::stringstream NetMessageParser::ss;

在您的类之外,链接器错误应该消失。

答案 1 :(得分:0)

您必须在CPP文件中声明静态变量的存储空间。你可能想要这样的东西

std :: stringstream NetMessageParser :: ss;

哦,不要把它放在头文件中,否则你会得到有关多个定义的错误