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和诸如此类的东西看了很多解决方案。 。*没有解决它,尝试分配指针的指针,我觉得我可能不会解决它而不解决误解。
答案 0 :(得分:1)
编译错误告诉你完全错误:
类型的参数'int (ROBOT::)(char, __file*)'
不匹配'int (*)(char, __file*)
...因为指向成员函数的指针与指向非成员函数的指针不兼容,for a couple of reasons.
答案 1 :(得分: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对象后设置它(可能是ROBOT的构造函数)
这是未经测试的,因为我不知道ROBOT的内部但是一切看起来都不错。