在解除引用静态变量时链接错误

时间:2012-06-25 13:27:32

标签: c++ static linker

(我没有找到任何类似的问题......所以,我希望你能帮助我)

在我正在开发的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

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

您已宣布 mutexHash存在,但尚未定义。您需要向test.cpp添加定义:

map<int, pthread_mutex_t> Test::mutexHash;