首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >g++ 2.9-gnupro-98r2,错误:不能声明对函数的引用;使用指针代替函数

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

Stack Overflow用户
提问于 2016-08-29 18:22:39
回答 1查看 92关注 0票数 0

我在LynxOS-178B2.2.2的一个g++版本(2.9-gnupro-98r2)中遇到了编译错误,而相同的代码将在编译时不会对较新版本的g++ (例如VxWorks 653 2.4.0.2 )抱怨。

下面的示例说明了这个问题:

代码语言:javascript
复制
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,我得到:

代码语言:javascript
复制
../../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. 是否有一种可移植的方式来编写这种代码,以便尽可能多的编译器接受它?
EN

回答 1

Stack Overflow用户

发布于 2016-08-29 18:30:40

这个问题正是错误信息中所说的。

要解决这个问题,请使用指向函数的指针:

代码语言:javascript
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39212688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档