나는 떨어져 복사 스레드 클래스의 약간 수정 된 버전을 가지고있는 나는 스레딩 기본 클래스 만드는 데 사용했다 Linux Self Help 사이트 :스레드에서 오버로드 된 멤버가 호출되지 않는 이유는 무엇입니까?
class Item : public Thread
및
: 나는 2 개 스레드 수업을class Thread
{
public:
static void *entry (void *pvArg) { Thread *pobjThread = static_cast<Thread *> (pvArg); pobjThread->run(); }
virtual void run (void) = 0;
};
을
class Product : public Thread
class Item
이 함수의 생성자에서 스레드를 시작합니다.이 클래스는 pthread 라이브러리를 으로 entry
을 pvArg
으로 호출하는 스레드를 생성하고 class Product
은 프로그램 실행 중에 나중에 스레드를 생성합니다.
이제 문제는 class Item
이 잘 작동합니다. run
함수가 호출되어 올바르게 처리됩니다.
pure virtual method called
두 클래스는 run
방법을 오버로드와 같은 구현을 가지고 있지만 하나라고하며 다른 하나는되지 않습니다 : class Product
나중에 같은 함수를 호출 할 때 그러나, 나는 얻는다.
왜 갑자기 pure virtual method called
예외가 발생합니까?
감사합니다.
업데이트 : Item
가 CPP 파일에 static Item item;
로 선언하고 하나가되어 class Product
때문에 class Item
는 다르다. class Product
은 일반 개체처럼 사용됩니다. 만약 내가 같은 일을 class Product
잘 작동합니다.
'제품'이 '항목'에서 파생되지 않았습니까? 그것은 오류를 설명합니다. – modelnine
@PlasmaHH - 예외는 정상적으로 호출되는 클래스에서 발생합니다. 'Item'의 ctor로부터 호출이 올바르게 작동하고 있습니다. – user626201
@ modelnine - 아니요, 그들은 분명히 다른 클래스입니다. 연결이 없으며 헤더 포함 (스레드 헤더 제외)에 포함되지 않습니다. – user626201