繁体   English   中英

错误:在没有对象的情况下无法调用成员函数'void Fortest :: run()'

[英]error: cannot call member function 'void Fortest::run()' without object|

我正在编写一个非常简单的c ++程序。

#include<iostream>
#include<thread>

class Fortest{
private:
    int x;
public:
    Fortest(int a)
    {
        x=a;
    }
    void run(void)
    {
        cout<<"test sucesses!"<<endl;
    }
};

int main()
{
    Fortest  hai(1);
    std::thread  t;

    t=std::thread(std::ref(hai),&Fortest::run());
    t.join();

    cout<<"program ends"<<endl;
    return 0;
}

而且,我不断收到错误消息:“没有对象就无法调用成员函数”。 谁能帮我解决这个问题?

您有两个问题:

首先是调用线程函数,将指针传递给它返回的值。 您应该将指针传递给该函数

第二个问题是您以错误的顺序传递了std::thread构造函数参数。 指向函数的指针是第一个参数,调用它的对象是第二个参数(这是函数的第一个参数)。

即应该是这样的

t = std::thread(&Fortest::run, &hai);

你说错了

尝试:

Fortest  hai(1);
std::thread  t;

t=std::thread(&Fortest::run, std::ref(hai));
t.join();

或通过t=std::thread(&Fortest::run, &hai); 检查std :: thread上的参数

现场演示

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM