对于LynxOS-178B 2.2.2,我面临着一个g ++版本(2.9-gnupro-98r2)的编译错误,而相同的代码将被编译而不会抱怨更新版本的g ++,例如: 4.3.3 for VxWorks 653 2.4.0.2。
以下示例说明了问题:
int method1(int);
void RefInit(){
int (&rmethod) (int) = method1;
rmethod(5);
return;
}
int method1(int x){
int y = x = 10;
return y;
}
在行 int(& rmethod)(int)= method1 ;对于2.9-gnupro-98r2我得到了:
../../src/Overloading_13_3_1_6_Initialization_by_conversion_function_for_direct_
reference_binding.cpp(8) : error: cannot declare references to functions; use pointer to function instead
如果一个编译器版本接受代码,则不能完全错误。我的猜测是它符合C ++标准,但较旧的编译器缺乏适当的实现。
答案 0 :(得分:1)
问题正是错误消息中的内容。
要解决此问题,请使用指向函数的指针:
int method1(int);
void PtrInit(){
int (*rmethod) (int) = &method1;
rmethod(5);
return;
}
int method1(int x){
int y = x = 10;
return y;
}
rmethod(5)
自动转换为(*rmethod)(5)
。