1

私はこのコードを書いていましたが、コンパイラーがエラーをスローし、理由がわかりません:Sだから私はあなたが私を助けることができるのだろうかと思っていました:これは簡単なスレッド実装のための抽象クラスです:

#ifndef THREAD_H
#define THREAD_H

#include <pthread.h>

class Thread {
public:
    void start();
    inline pthread_t getThread() const{
        return _thread;
    }

private:
    pthread_t _thread;
    inline static void* callRun(void* pObject){
        ((Thread*)pObject)->run();
        return (void*)0;
    }

protected:
    virtual void* run();
};

#endif  /* THREAD_H */

ソースコードは次のとおりです。

#include "Thread.h"

void Thread::start(){
    pthread_attr_t attrib;
    pthread_attr_init(&attrib);
    pthread_attr_setdetachstate(&attrib, PTHREAD_CREATE_JOINABLE);
    pthread_create(&_thread, &attrib, callRun, (void*)this);
    pthread_attr_destroy(&attrib);
}

そして、PlayersManagerクラスはスレッドから継承します

#ifndef PLAYERMANAGER_H
#define PLAYERMANAGER_H

#include "Thread.h"

class PlayersManager : public Thread {

private:
    void movePlayers();
    void checkPlayers();
    void* run();
};

#endif  /* PLAYERMANAGER_H */

しかし、次のコンパイルエラーが発生します:build / Debug / GNU-Linux-x86 / PlayersManager.o:(。rodata._ZTI14PlayersManager [_ZTI14PlayersManager] + 0x8): `typeinfoforThread'への未定義の参照

何が起こっているのかについて何か考えはありますか?ありがとう。

4

0 に答える 0