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的构造函数)
这是未经测试的,因为我不知道机器人的内部结构,但一切看起来都很好。