0
    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*)'

我通过 Stack Overflow 等查看了许多解决方案。.* 没有解决它,尝试分配一个指针的指针,我觉得如果不解决误解,我可能不会解决它。

4

2 回答 2

1

编译器错误会告诉您究竟出了什么问题:

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

...因为指向成员函数的指针与指向非成员函数的指针不兼容,原因有几个。

于 2013-05-16T20:08:18.973 回答
0

一种选择是创建一个单独的自由函数,但这取决于 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 的内部结构,但一切看起来都不错。

于 2013-05-16T20:31:18.207 回答