2015-11-23 93 views
1

我試圖做這樣的事情:鏈接錯誤,當我使用模板和靜態變量

class A 
{ 
    static pthread_mutex_t m; 
public: 
    template<typename T> 
     static void TestFunc(T t) { 
      pthread_mutex_lock(&m); 
    } 
    static void Test() 
    { 
      TestFunc(13); 
    } 
}; 

但收到鏈接錯誤:

/tmp/cc1HN0fI.o: In function void A::TestFunc<int>(int)': TReaderThread.cpp:(.text._ZN1A8TestFuncIiEEvT_[_ZN1A8TestFuncIiEEvT_]+0xc): undefined reference to A::m' collect2: error: ld returned 1 exit status make: *** [all] Error 1

看來,這個錯誤發生,只有當TestFunc是模板功能。這是代碼的小和平,我需要 TestFunc是模板,我的互斥體是靜態變量。是否有可能在模板處理中解決這個問題? P.S.真的,我需要做 - 實施示蹤劑singlton(同步輸出描述符)。

+0

您定義了'm',對嗎? –

回答

1

您的static pthread_mutex_t m;已聲明但尚未定義。在* .cpp實現文件中添加以下行:

pthread_mutex_t A::m; 
0

模板與您獲得的鏈接器錯誤無關。你在課堂上做的是一個聲明。您需要在類之外定義靜態變量,以便分配和初始化內存。