Tôi chỉ mới bắt đầu sử dụng các chuỗi C++ 11 và tôi đã vật lộn với một lỗi (có thể là ngớ ngẩn). Đây là chương trình mẫu của tôi:C++ 11 Khởi tạo chủ đề với các hàm thành viên biên dịch lỗi
#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;
}
Có thể bắt đầu chuỗi từ chức năng thành viên thuần túy không? Nếu không, làm thế nào tôi có thể bọc hàm foo của mình từ đối tượng obj để có thể tạo chuỗi như vậy? Cảm ơn bạn trước!
Đây là lỗi biên dịch:
thread_test.cpp: In function ‘int main()’: thread_test.cpp:32:22: error: no matching function for call to ‘std::thread::thread()’
thread_test.cpp:32:22: note: candidates are:
/usr/include/c++/4.6/thread:133:7: note: std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (A::*)(), _Args = {}]
/usr/include/c++/4.6/thread:133:7: note: no known conversion for argument 1 from ‘’ to ‘void (A::*&&)()’
/usr/include/c++/4.6/thread:128:5: note: std::thread::thread(std::thread&&)
/usr/include/c++/4.6/thread:128:5: note: no known conversion for argument 1 from ‘’ to ‘std::thread&&’
/usr/include/c++/4.6/thread:124:5: note: std::thread::thread()
/usr/include/c++/4.6/thread:124:5: note: candidate expects 0 arguments, 1 provided
Hãy thử một lambda đơn giản: '[&]() {obj.foo();}'. [Full code here] (http://liveworkspace.org/code/4Fh1lL$1). – BoBTFish
+1: Ví dụ mã nhỏ nhưng đầy đủ và thông báo lỗi không được rút gọn. Chỉ cần lưu ý rằng đoạn mã định dạng ở đây trên SO không thích các tab (Tôi đã sửa lỗi này cho bạn trong bài đăng này). – Angew
Cảm ơn Angew, tôi chắc chắn sẽ thay đổi các tab trong các bài viết sau này. – Rob013