错误:ISO C 禁止采用不合格或括号的非静态成员函数的地址,以形成指向成员函数的指针
error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function
我正在尝试以下代码:
std::thread t(&(Transmitter::sender), this, some_variables);
,其中发送者是同一类的成员函数,从其方法称为上线。
我得到警告:
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。
错误消息非常清楚。
ISO C 禁止采用不合格或括号的非静态成员函数的地址,以形成指向成员函数的指针。说'&amp; transmitter ::发送者'[-fpermissive]
来自expr.unary.op
仅当显式&amp;被使用,其操作数是一个合格的ID,未包含在括号中。 [注意:即表达式&amp;(合格-ID),其中合格的ID在括号中不包含在括号中,不在形成类型"指向成员指针"的表达式。合格的ID也没有,因为从合格的ID对于非静态成员函数没有隐含的转换为"构件函数指针"类型,因为函数类型的lvalue是"函数指针"类型的类型。([cons.func])。即使在不合格的ID级别的范围内,也不是&amp;&amp; ID iD指向成员的指针。 - 终注]
您需要使用:
std::thread t(&Transmitter::sender, this, some_variables);
请参阅此演示
相关文章:
- 为什么成员函数地址离自由函数这么远?
- MFC 消息映射中的函数地址
- 设置成员 GlobalCEFApp->OnWebKit使用函数地址初始化 C++生成器
- 在Visual C 中找到调用函数地址(安全)
- 获取函数地址时出现奇怪行为
- 函数地址
- 如何在C++中打印成员函数地址
- 为什么函数指针、函数地址和函数相同
- 匹配布尔值与常量 void* 重载的函数地址
- 函数地址和函数地址的地址没有区别吗?
- 在 Linux 库中查找静态函数地址
- 调用传递给 gcc 内联汇编器 (avr-gcc) 的 const 函数地址
- 使用32位应用程序从64位kernel32.dll获取函数地址
- 为什么函数地址不是常量表达式
- 将函数地址转换为 64 位整数:未定义/行为不当
- Visual Studio在打印函数地址时出错
- 获取有关函数地址的信息
- 通过函数地址调用另一个类的函数
- 打印成员函数地址的最简单方法是什么?
- 圆括号成员函数地址错误