首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类成员函数的C++11多线程

使用类成员函数的C++11多线程
EN

Stack Overflow用户
提问于 2015-04-21 01:27:02
回答 3查看 15.9K关注 0票数 5

我想在C++11中使用多线程在自己的线程中调用类成员函数。我已经能够让它与全局函数一起工作:

代码语言:javascript
复制
#include <thread>
#include <iostream>

void Alpha(int x)
{
    while (true)
    {
        std::cout << x << std::endl;
    }
}

int main()
{
    std::thread alpha_thread(Alpha, 5);
    alpha_thread.join();

    return 0;
}

但是,我无法使用类成员函数对其进行编译:

代码语言:javascript
复制
#include <thread>
#include <iostream>

class Beta
{
public:
    void Gamma(int y)
    {
        while (true)
        {
            std::cout << y << std::endl;
        }
    }
};

int main()
{
    Beta my_beta;
    std::thread gamma_thread(my_beta.Gamma, 5);
    gamma_thread.join();

    return 0;
}

编译错误为:

代码语言:javascript
复制
no matching function for call to 'std::thread::thread(<unresolved overloaded function type>)'
 std::thread gamma_thread(my_beta.Gamma, 5);
                                    ^

我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-21 01:29:59

您需要传递两个东西:指向成员的指针和对象。在没有对象的情况下,不能在C++中调用非静态成员函数(如Gamma)。正确的语法应该是:

代码语言:javascript
复制
std::thread gamma_thread(&Beta::Gamma, // the pointer-to-member
                         my_beta,      // the object, could also be a pointer
                         5);           // the argument

您可以将这里的my_beta视为Gamma()的第一个参数,而将5视为第二个参数。

票数 13
EN

Stack Overflow用户

发布于 2015-04-21 01:30:02

您需要命名函数,然后将调用该函数的对象作为显式隐式this参数传递。:)

代码语言:javascript
复制
std::thread gamma_thread(&Beta::Gamma, my_beta, 5);

诚然,这有点抽象泄漏。

票数 2
EN

Stack Overflow用户

发布于 2015-04-21 01:30:49

您的程序中存在多个问题

  1. 正如您的编译错误所说,考虑到this是成员函数

的隐式参数,您需要传递函数&Beta::Gamma.

  • You需要将对象作为参数传递的地址

修改后的源

代码语言:javascript
复制
#include <thread>
#include <iostream>

class Beta
{
public:
    void Gamma(int y)
    {
        while (true)
        {
            std::cout << y << std::endl;
        }
    }
};

int main()
{
    Beta my_beta;
    std::thread gamma_thread(&Beta::Gamma, my_beta, 5);
    gamma_thread.join();

    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29754438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档