2011-10-14 72 views
-1

我有以下類:stringstream導致鏈接錯誤?

#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 

將會產生下面的鏈接器錯誤:

Error 3 error LNK2001: unresolved external symbol "private: static class std::basic_stringstream,class std::allocator > cge::NetMessageParser::ss" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@A) NetMessageParser.obj

出了什麼問題?

+0

這有什麼好做'的std :: stringstream'錯誤。你只是沒有正確閱讀C++書中關於如何定義靜態成員的章節。關於這個問題有一百萬億美元的問題。 –

+0

@Tomalak Geret'kal對不起。 – jmasterx

回答

0

您必須在CPP文件中聲明靜態變量的存儲。你可能想要這樣的東西

std :: stringstream NetMessageParser :: ss;

哦,不要把這個頭文件中,否則您將獲得有關多重定義

3

您必須在類之外定義靜態成員,否則它們將被視爲外部成員。加上這個:

static std::stringstream NetMessageParser::ss; 

你的班級和鏈接器錯誤應該消失。