2
如何从ThreadBase.h中调用虚拟函数来在pthread_create中运行的静态指针函数中使用它?不能调用成员函数虚拟无效ThreadBase :: doTask()'没有对象
当我遵守它,展示 - >“不能调用成员函数‘虚拟无效ThreadBase :: doTask()’没有对象”
谢谢你这么多。
// ThreadBase.h
class ThreadBase {
public:
ThreadBase();
void sayName();
virtual void doTask() = 0; // --> dotask()
static void *run(void *para);
void start();
};
// ThreadBase.cpp
#include <iostream>
#include "ThreadBase.h"
#include "ThreadEncoder.h"
#include "pthread.h"
using namespace std;
ThreadBase :: ThreadBase()
{
}
void ThreadBase :: sayName() {
cout << "I am a RobnertsQ" << endl;
}
void *ThreadBase :: run(void *para) {
cout << "run()" << endl;
while(false) {
doTask(); // -> ***My problem
// (delaySleep)
}
}
void ThreadBase :: start() {
pthread_t thread_encoder;
pthread_create(&thread_encoder, NULL, &ThreadEncoder :: run, NULL);
}
// ThreadEncoder.h
#include <iostream>
using namespace std;
class ThreadEncoder : public ThreadBase {
public:
ThreadEncoder();
ThreadEncoder(int);
void doTask();
protected:
string getFullName() {
return "ThreadEncoder";
}
};
// ThreadEncoder.cpp
#include <iostream>
#include "ThreadBase.h"
#include "ThreadEncoder.h"
using namespace std;
ThreadEncoder :: ThreadEncoder()
{
cout << "ThreadEncoder default " << endl;
}
ThreadEncoder :: ThreadEncoder(int delaySleep)
{
cout << "ThreadEncoder delaySleep = " << delaySleep << endl;
}
void ThreadEncoder :: doTask() {
cout << "ThreadEncoder doTask !!!" << endl;
// main.cpp
#include <iostream>
#include "ThreadBase.h"
#include "ThreadEncoder.h"
//#include "ThreadGps.h"
using namespace std;
int main(){
ThreadEncoder te;
te.start();
}
你能告诉我该怎么做吗? 谢谢。
嗨,如果您调用基类的纯输出为 –
,则输出将与调用覆盖相同,因为它*是*调用覆盖 – user1610015