Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用模板和静态变量时发生链接器错误_C++_Templates - Fatal编程技术网

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
,对吗?