C++ 使用模板和静态变量时发生链接器错误
我正试着做这样的事情:C++ 使用模板和静态变量时发生链接器错误,c++,templates,C++,Templates,我正试着做这样的事情: 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); } }; A类 { 静态pthre
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);
}
};
A类
{
静态pthread_mutex_t m;
公众:
模板
静态无效测试函数(T){
pthread_mutex_lock(&m);
}
静态孔隙试验()
{
TestFunc(13);
}
};
但接收链接器错误:
/tmp/cc1HN0fI.o:在函数void A::TestFunc(int)”中:
traderThread.cpp:(.text._zn1a8testfunciievt_[_zn1a8testfunciievt_]+0xc):对
A::m'的未定义引用
collect2:错误:ld返回了1个退出状态
make:**[all]错误1
似乎只有当TestFunc是模板函数时才会发生此错误。这是一个小小的代码和平,我需要它
TestFunc是模板,我的互斥体是静态变量。是否可以用模板法解决这个问题?
另外,我需要做的是——将tracer实现为singlton(对输出描述符进行同步)。
您的
静态pthread\u mutex\m代码>已声明但未定义。在*.cpp实现文件中添加以下行:
pthread_mutex_t A::m;
模板与您得到的链接器错误无关。您在类中所做的是一个声明。您需要在类之外定义静态变量,以便分配和初始化内存。您定义了m
,对吗?