(我没有找到任何类似的问题......所以,我希望你能帮助我)
在我正在开发的C ++程序中,我有一个模拟线程的类。我在这里称之为“测试”。在其中,我有一个静态映射(来自STL的std::map
),其中我存储了一些信号量(因为我需要所有线程都能访问相同的信号量)。 (我认为不值得解释为什么我使用的是map
,而不是vector
,但我认为这不应该是一个问题。
为了“获取”这个静态变量,我创建了一个getMutexHash()
函数,它返回一个指向静态map
的指针。但是,出于某种原因,在编译之后,我在尝试返回this pointer
时遇到链接器错误。
以下代码举例说明了问题:
// MAIN.CPP
#include "Test.h"
int main ()
{
Test test;
map<int, pthread_mutex_t>* mutexHash = test.getMutexHash();
return 0;
}
// TEST.H
#include <map>
#include <pthread.h>
using namespace std;
class Test
{
public:
map<int, pthread_mutex_t>* getMutexHash();
private:
static map<int, pthread_mutex_t> mutexHash;
};
// TEST.CPP
#include "Test.h"
map<int, pthread_mutex_t>* Test::getMutexHash()
{
return &mutexHash;
}
编译时,我没有错误也没有警告;但在链接时,我收到此错误:
Test.o: In function `Test::getMutexHash()':
Test.cpp:(.text+0x9): undefined reference to `Test::mutexHash'
collect2: ld returned 1 exit status
有人可以帮助我吗?
答案 0 :(得分:3)
您已宣布 mutexHash
存在,但尚未定义。您需要向test.cpp
添加定义:
map<int, pthread_mutex_t> Test::mutexHash;