当前位置: 首页 > 知识库问答 >
问题:

C++11多线程类成员函数[重复]

曹德明
2023-03-14

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

#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;
}
#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;
}
no matching function for call to 'std::thread::thread(<unresolved overloaded function type>)'
 std::thread gamma_thread(my_beta.Gamma, 5);
                                    ^

共有1个答案

邵沛
2023-03-14

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

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视为第二个参数。

 类似资料:
  • thread_test.cpp:32:22:注意:候选项为: /usr/include/c++/4.6/thread:133:7:注意:std::thread::thread(_callable&&,_args&&...)[with_callable=void(a::*)(),_args={}] /usr/include/c++/4.6/线程:133:7:注意:参数1从''到'void(A::*&

  • C++ 类 & 对象 类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。 让我们看看之前定义的类 Box,现在我们要使用成员函数来访问类的成员,而不是直接访问这些类的成员: class Box { public: double length; // 长度

  • 主要内容:在类体中和类体外定义成员函数的区别类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的集合。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存储。 类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是

  • 我有一个问题,我想在下面的代码中专门化模板类的模板成员函数。这个问题的答案是模板类成员函数的显式特化,这似乎表明它无法完成。这是正确的吗,如果是这样,我可以使用任何解决方法,以便在编译时通过内联inc函数进行扩展? 非常感谢! g吐槽道: test2.cpp:32:13: 错误: 非命名空间作用域中的显式专用化 'struct IdxIterator' test2.cpp:32:25: 错误: 非

  • *我在中间调试的时候发现在走到 aa.getobj()=m 这一行的时候发生了又走了一遍新的构造函数 不知道这是为什么?我怀疑是中间临时构建的一个对象 但是为什么要这么做? 还有就是 为什么int变量可以赋值给自定义的类 是类似于int 赋值给double 的情况吗?就是类型的隐式转换 是这样吗? * 求解~

  • 主要内容:const成员变量,const成员函数(常成员函数)在类中,如果你不希望某些数据被修改,可以使用 关键字加以限定。const 可以用来修饰成员变量和成员函数。 const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表,这点在前面已经讲到了,请猛击《 C++初始化列表》回顾。 const成员函数(常成员函数) con