C++ 传递对同一类中函数的引用

MGG

我正在使用 C++ 中的 mbed 框架开发嵌入式系统。要将中断函数附加到串行中断,我通常这样做:

Serial pc(pin_u_tx, pin_u_rx,115200);

void SerialStart(void) {
...
    pc.attach(&SerInt);
...
}

void SerInt(){
    ...
}

但是现在我需要从类内部做同样的事情,它不起作用,因为我不能引用内部函数:

CTCOMM::CTCOMM()
{
    pc = new Serial(ser_tx, ser_rx, ser_baud);
    pc->attach(&serial_interrupt);
}

void CTCOMM::serial_interrupt() {
...
}

我尝试了几种方法,但都不起作用:

pc->attach(&serial_interrupt);
gives the error
lib\CTcomm\ctcomm.cpp:12:17: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function.  Say '&CTCOMM::serial_interrupt' [-fpermissive]

pc->attach(*serial_interrupt);
gives the error
lib\CTcomm\ctcomm.cpp:12:17: error: invalid use of member function 'void CTCOMM::serial_interrupt()' (did you forget the '

pc->attach(*serial_interrupt());
gives the error
lib\CTcomm\ctcomm.cpp:12:33: error: void value not ignored as it ought to be ()' ?)

pc->attach((*this)->*(serial_interrupt));
gives the error
lib\CTcomm\ctcomm.cpp:12:23: error: invalid use of non-static member function 'void CTCOMM::serial_interrupt()'

等等(我尝试了在这里找到的更多建议,但没有成功)。指向该函数的正确方法是什么?

奥田健太郎

试试这个。 pc->attach(callback(this, &CTCOMM::serial_interrupt));

pc->attach(this, &CTCOMM::serial_interrupt);也应该工作。但它在最近版本的 mbed OS 中已被弃用。

这是最新的 Mbed API:https ://os.mbed.com/docs/v5.10/mbed-os-api-doxy/classmbed_1_1_serial.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++:按值将对象传递给同一类的成员函数

在C ++中,类是否可以包含指向构造函数中初始化的同一类的指针?

在C ++中对同一类使用多个模板

C#-如何在两个不同的dll中引用同一类型?

我可以将一个类传递给Swift上同一类的函数吗(尝试编写使用C ++和Swift语言编写的类)

Rcpp是否可以公开引用同一类的C ++类方法?

C ++:从同一类的成员函数调用纯虚函数

如何在c ++中将一个函数的数据成员访问到同一类中的另一个函数

将实例传递给同一类中的函数

如何将类参数值的引用传递给同一类中的函数默认参数值

如何在 c++ 测试 Visual Studio 中检查它们是否属于同一类?

如何在C ++中为同一类定义不同的类型

在C ++中,如何在同一类对象中共享公共元素。

使公共成员变量访问C ++中同一类的私有成员

方法找不到在同一类 C# 中实例化的公共列表

C#在构造函数中传递对类的引用

C ++通过引用在类中传递函数

如何在C#中的另一个方法中调用同一类中的方法?

在 C++ 中将对象设置为等于同一类的构造函数是否有效?

在 C 中传递对函数的引用

如何从同一类 C# 中的另一个方法访问一个方法的变量?

在c#中的同一类中可以有多个具有不同声明的Main方法吗

将一个类传递给另一类的构造函数时,C ++没有默认的构造函数错误

为什么我不能从同一类C#中的方法访问公共字符串

另一类中的C ++类用法

将图像传递给同一类中的另一个函数

类:函数在同一类中的使用

如何反序列化包含同一类嵌套的 json 类(Unity C#)?

C ++具有从同一类派生的基类的多重继承