简体   繁体   English

没有对象就无法调用成员函数“ virtual void ThreadBase :: doTask()”

[英]cannot call member function 'virtual void ThreadBase::doTask()' without object

How can I call virtual function from ThreadBase.h to use this in static pointer function that run in pthread_create ? 如何从ThreadBase.h调用虚拟函数以在pthread_create中运行的静态指针函数中使用此函数?

When I complied it, show -> "cannot call member function 'virtual void ThreadBase::doTask()' without object" 当我编译它时,显示->“无法在没有对象的情况下调用成员函数'virtual void ThreadBase :: doTask()'”

Thanks you so much. 非常感谢。

// 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();

}

Can you advise me on what to do? 你能建议我做什么吗? Thanks. 谢谢。

Change the call to doTask to: 将对doTask的调用更改为:

static_cast<ThreadBase*>(para)->doTask();

And the call pthread_create to: 并调用pthread_create来:

pthread_create( &thread_encoder, NULL, &ThreadEncoder :: run, this);

Reason: the fourth argument to pthread_create will be passed as the argument to your ThreadBase::run method when the thread starts. 原因:线程启动时,pthread_create的第四个参数将作为参数传递给ThreadBase :: run方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 试图在QLabel上绘画失败(无法在没有对象的情况下调用成员函数&#39;virtual void QLabel :: paintEvent(QPaintEvent *)&#39;) - Trying to paint on a QLabel fails (cannot call member function 'virtual void QLabel::paintEvent(QPaintEvent*)' without object) 错误:在没有对象的情况下无法调用成员函数&#39;void Fortest :: run()&#39; - error: cannot call member function 'void Fortest::run()' without object| QT:当我有一个虚函数时,不能在没有对象的情况下调用成员 - QT : cannot call member without object when I have a virtual function 不能调用没有 object 的成员 function - cannot call member function without object 命名空间:不能在没有对象的情况下调用成员函数 - namespace: cannot call member function without object 没有对象错误就无法调用成员函数 - cannot call member function without object error 没有对象就无法调用成员函数,但是我有一个对象才能调用该函数 - Cannot call member function without object but I call the function with an object QT,C ++无法在没有对象的情况下调用成员函数 - QT, C++, cannot call member function without object 不能在没有对象的情况下调用成员函数 c++ Crypto Program - Cannot call member function without object c++ Crypto Program 没有object = C ++就无法调用成员函数 - Cannot call member function without object = C++
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM