我一直在編碼很長一段時間,但我不明白這個錯誤。我正在編寫一個自定義系統,用於爲特定對象實例提供唯一的整數ID(我稱之爲標籤)。我正在將其中一個類作爲Singleton實現。Singleton類中的無法解析的外部符號
的兩個階層的標籤系統被定義爲這樣的:
#include "singleton.h"
class Tag: public bear::Singleton<Tag>
{
public:
static dUINT32 RequestTag(Tagged* requester);
static void RevokeTags(void);
private:
Tag(void);
~Tag(void);
Tagged** m_tagTable; // list of all objects with active tags
dUINT32 m_tagTable_capacity, // the maximum capacity of the tag table
m_tagIndexer; // last given tag
};
class Tagged
{
friend class Tag;
public:
inline dUINT32 GetTag(void) {return m_tag;}
private:
inline void InvalidateTag(void) {m_tag=INVALID_TAG;}
dUINT32 m_tag;
protected:
Tagged();
virtual ~Tagged();
};
的Singleton類的定義是這樣的:
template <typename T>
class Singleton
{
public:
Singleton(void);
virtual ~Singleton(void);
inline static T& GetInstance(void) {return (*m_SingletonInstance);}
private:
// copy constructor not implemented on purpose
// this prevents copying operations any attempt to copy will yield
// a compile time error
Singleton(const Singleton<T>& copyfrom);
protected:
static T* m_SingletonInstance;
};
template <typename T>
Singleton<T>::Singleton (void)
{
ASSERT(!m_SingletonInstance);
m_SingletonInstance=static_cast<T*>(this);
}
template <typename T>
Singleton<T>::~Singleton (void)
{
if (m_SingletonInstance)
m_SingletonInstance= 0;
}
我在試圖編譯和鏈接收到以下錯誤在一起的文件:
test.obj:錯誤LNK2001:無法解析的外部符號「protected:static class util :: Tag * b ear :: Singleton :: m_SingletonInstance「(?m_SingletonInstance @?$ Singleton @ VTag @ util @@@ bear @@ 1PAVTag @ util @@ A) 1> C:... \ tools \ Debug \ util.exe:fatal錯誤LNK1120:1個未解決的外部問題
有沒有人有任何想法,爲什麼我得到這個錯誤?
與你的問題沒有直接關係,但我建議看看Scott Meyers的單身模式:http://stackoverflow.com/questions/1661529/is-meyers-implementation-of-singleton-pattern-thread-safe –