我正在尝试以下代码:
std::thread t(&(Transmitter::sender), this, some_variables);
其中sender是同一个类的成员函数,从该方法调用上面的行。
我收到警告:
Transmitter.h: In member function 'int Transmitter::transmit_streams(std::vector<std::vector<single_stream_record> >, int, Receiver&)':
Transmitter.h:81:44: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&Transmitter::sender' [-fpermissive]
虽然编译并运行良好。如何删除此警告。
我的g ++是4.6.3,我使用-std = c ++ 0x编译代码。
答案 0 :(得分:7)
错误信息非常清楚。
ISO C ++禁止获取非限定或带括号的非静态成员函数的地址,以形成指向成员函数的指针。 Say&#39;&amp; Transmitter :: sender&#39; [-fpermissive]
指向成员的指针仅在显式&amp;使用和它的操作数是一个未括在括号中的限定id。 [注意:表达式&amp;(qualified-id),其中qualified-id括在括号中,不形成“指向成员的指针”类型的表达式。也不是qualified-id,因为没有从非静态成员函数的qualified-id到类型“指向成员函数的指针”的隐式转换,因为从函数类型的左值到类型“指向函数的指针” ([conv.func])。即使在nonqualified-id类的范围内,也不是&amp; unsqualified-id指向成员的指针。 - 结束说明]
您需要使用:
std::thread t(&Transmitter::sender, this, some_variables);
请参阅this demo