Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;11带有成员函数的线程初始化编译错误 我刚刚开始使用C++ 11线程,我一直在(可能是愚蠢的)错误中挣扎。 这是我的示例程序: #include <iostream> #include <thread> #include <future> using namespace std; class A { public: A() { cout << "A constructor\n"; } void foo() { cout << "I'm foo() and I greet you.\n"; } static void foo2() { cout << "I'm foo2() and I am static!\n"; } void operator()() { cout << "I'm the operator(). Hi there!\n"; } }; void hello1() { cout << "Hello from outside class A\n"; } int main() { A obj; thread t1(hello1); // it works thread t2(A::foo2); // it works thread t3(obj.foo); // error thread t4(obj); // it works t1.join(); t2.join(); t3.join(); t4.join(); return 0; } #包括 #包括 #包括 使用名称空间std; 甲级{ 公众: (){ 您需要一个不带参数的可调用对象,所以 thread t3(&A::foo, &obj);_C++_Multithreading_Class_C++11_Member - Fatal编程技术网

C++;11带有成员函数的线程初始化编译错误 我刚刚开始使用C++ 11线程,我一直在(可能是愚蠢的)错误中挣扎。 这是我的示例程序: #include <iostream> #include <thread> #include <future> using namespace std; class A { public: A() { cout << "A constructor\n"; } void foo() { cout << "I'm foo() and I greet you.\n"; } static void foo2() { cout << "I'm foo2() and I am static!\n"; } void operator()() { cout << "I'm the operator(). Hi there!\n"; } }; void hello1() { cout << "Hello from outside class A\n"; } int main() { A obj; thread t1(hello1); // it works thread t2(A::foo2); // it works thread t3(obj.foo); // error thread t4(obj); // it works t1.join(); t2.join(); t3.join(); t4.join(); return 0; } #包括 #包括 #包括 使用名称空间std; 甲级{ 公众: (){ 您需要一个不带参数的可调用对象,所以 thread t3(&A::foo, &obj);

C++;11带有成员函数的线程初始化编译错误 我刚刚开始使用C++ 11线程,我一直在(可能是愚蠢的)错误中挣扎。 这是我的示例程序: #include <iostream> #include <thread> #include <future> using namespace std; class A { public: A() { cout << "A constructor\n"; } void foo() { cout << "I'm foo() and I greet you.\n"; } static void foo2() { cout << "I'm foo2() and I am static!\n"; } void operator()() { cout << "I'm the operator(). Hi there!\n"; } }; void hello1() { cout << "Hello from outside class A\n"; } int main() { A obj; thread t1(hello1); // it works thread t2(A::foo2); // it works thread t3(obj.foo); // error thread t4(obj); // it works t1.join(); t2.join(); t3.join(); t4.join(); return 0; } #包括 #包括 #包括 使用名称空间std; 甲级{ 公众: (){ 您需要一个不带参数的可调用对象,所以 thread t3(&A::foo, &obj);,c++,multithreading,class,c++11,member,C++,Multithreading,Class,C++11,Member,应该可以做到这一点。它的效果是创建一个可调用实体,在obj上调用a::foo 原因是a的非静态成员函数采用类型(可能是cv限定的)a*的隐式第一个参数。当您调用obj.foo()时,您实际上是在调用a::foo(&obj)。一旦您知道了这一点,上面的咒语就非常有意义了。尝试一个简单的lambda:[&](){obj.foo();}。+1:小但完整的代码示例和未桥接的错误消息。请注意,此处的代码段格式不喜欢制表符(我在本文中为您修复了此问题)。谢谢Angew,我肯定会在以后的帖子中更改标签。非常感

应该可以做到这一点。它的效果是创建一个可调用实体,在
obj
上调用
a::foo


原因是
a
的非静态成员函数采用类型(可能是cv限定的)
a*
的隐式第一个参数。当您调用
obj.foo()
时,您实际上是在调用
a::foo(&obj)
。一旦您知道了这一点,上面的咒语就非常有意义了。

尝试一个简单的lambda:
[&](){obj.foo();}
。+1:小但完整的代码示例和未桥接的错误消息。请注意,此处的代码段格式不喜欢制表符(我在本文中为您修复了此问题)。谢谢Angew,我肯定会在以后的帖子中更改标签。非常感谢!我很抱歉重新发布了一个现有的问题,我可能错过了正确的标签。顺便说一句,现在它可以工作了!@Rob013很高兴它起到了帮助作用。事实上,我刚刚意识到这在副本中并没有得到很好的解释。@juanchopanza我理解任何成员函数(非静态)的意义将采用该类型的隐式第一个参数(该实例的指针)。但是,如果我将对象作为参数(在线程上分配对象的方式)传递以调用任何普通成员函数(例如A::foo(&obj);),为什么它不起作用呢?请告诉我更多关于这一点的信息..任何有关此概念的链接都可以。谢谢。。