我在LynxOS-178B2.2.2的一个g++版本(2.9-gnupro-98r2)中遇到了编译错误,而相同的代码将在编译时不会对较新版本的g++ (例如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++标准,但旧的编译器缺乏相应的实现。
发布于 2016-08-29 18:30:40
这个问题正是错误信息中所说的。
要解决这个问题,请使用指向函数的指针:
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)。
https://stackoverflow.com/questions/39212688
复制相似问题