将stdout重定向到LCD:成员类的指针

时间:2013-05-16 20:00:58

标签: c++ avr

    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和诸如此类的东西看了很多解决方案。 。*没有解决它,尝试分配指针的指针,我觉得我可能不会解决它而不解决误解。

2 个答案:

答案 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的内部但是一切看起来都不错。