我有以下课程:
#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
可能出现什么问题?
答案 0 :(得分:3)
您还必须在类之外定义静态成员,否则它们将被视为外部成员。加上这个:
static std::stringstream NetMessageParser::ss;
在您的类之外,链接器错误应该消失。
答案 1 :(得分:0)
您必须在CPP文件中声明静态变量的存储空间。你可能想要这样的东西
std :: stringstream NetMessageParser :: ss;
哦,不要把它放在头文件中,否则你会得到有关多个定义的错误