(同様の質問が見つかりませんでした...だから、あなたが私を助けてくれることを願っています)
私が開発している C++ のプログラムには、スレッドをシミュレートするクラスがあります。ここでは「テスト」と呼びます。その中に、いくつかのセマフォを格納する静的マップ ( std::map
STL から) があります (すべてのスレッドが同じセマフォにアクセスする必要があるため)。(私が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
誰かが私を助けることができますか?