重定向标准输出到LCD:成员类的指针


    FILE *LCD_stdout = new FILE();
    int (*ptr)(char, FILE *) = ROBOT::__LCD_putchar;
    fdev_setup_stream(LCD_stdout, ptr, NULL, _FDEV_SETUP_WRITE );
    stdout = LCD_stdout;

给出错误:

In member function 'SUBSYS_OPENSTAT ROBOT::LCD_open()':
LCD.cpp:108: error: argument of type 'int (ROBOT::)(char, __file*)' does not match 'int (*)(char, __file*)'

我看了一些解决方案通过堆栈溢出和什么的。.*不解决它,尝试分配一个指针的指针,我觉得我可能不会解决它没有解决误解。

编译器错误告诉你确切的哪里出了问题:

类型 'int (ROBOT::)(char, __file*)'参数与 'int (*)(char, __file*) 不匹配

…因为指向成员函数的指针与指向非成员函数的指针不兼容,原因如下:

一种选择是创建一个单独的free函数,但这取决于ROBOT对象驻留的位置。例如,如果您有一个全局ROBOT对象,您可以执行以下操作

ROBOT globalRobot;
int callback(char c, FILE* f)
{
    return globalRobot.__LCD_putchar(c, f);
}
FILE *LCD_stdout = new FILE();
fdev_setup_stream(LCD_stdout, callback, NULL, _FDEV_SETUP_WRITE );
stdout = LCD_stdout;

如果只有一个机器人对象,并且它是另一个类的成员变量,则将globalRobot更改为指针,并在robot对象创建后设置它(可能是robot的构造函数)

这是未经测试的,因为我不知道机器人的内部结构,但一切看起来都很好。

最新更新