-2

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

在我正在开发的 C++ 程序中,我有一个模拟线程的类。我在这里称它为“测试”。在其中,我有一个静态映射(std::map来自 STL),其中存储了一些信号量(因为我需要所有线程都可以访问相同的信号量)。(我认为不值得解释为什么我使用 a map,而不是 a vector,但我相信这应该不是问题)

为了“获取”这个静态变量,我创建了一个getMutexHash()函数,它返回一个指向 static 的指针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

有人能帮我吗?

4

1 回答 1

3

你已经声明mutexHash存在,但还没有定义它。您需要将定义添加到test.cpp

map<int, pthread_mutex_t> Test::mutexHash;
于 2012-06-25T13:53:15.533 回答