错误: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

本文关键字:函数 地址 指针 成员 静态成员 禁止 ISO 不合格 错误      更新时间:2023-10-16

我正在尝试以下代码:

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);

请参阅此演示