g ++ 2.9-gnupro-98r2,错误:无法声明对函数的引用;使用指针来代替函数

时间:2016-08-29 18:22:40

标签: c++ g++

对于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 ++标准,但较旧的编译器缺乏适当的实现。

  1. 究竟是什么问题?
  2. 是否有一种可移植的方式来编写那种代码,以便尽可能多的编译器接受它

1 个答案:

答案 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)