-2

(同様の質問が見つかりませんでした...だから、あなたが私を助けてくれることを願っています)

私が開発している C++ のプログラムには、スレッドをシミュレートするクラスがあります。ここでは「テスト」と呼びます。その中に、いくつかのセマフォを格納する静的マップ ( std::mapSTL から) があります (すべてのスレッドが同じセマフォにアクセスする必要があるため)。(私がmap, の代わりに ,を使用している理由を説明する価値はないと思いますが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 に答える