【问题标题】:Error: functions that differ only in their return type cannot be overloaded错误:仅返回类型不同的函数不能重载
【发布时间】:2013-11-16 21:17:01
【问题描述】:

我使用的是 mac os 10.9,我有一个使用 freeglut 库的 C++ 程序。当我尝试制作这个项目时。它给出了一个错误,我不知道这是否是我的错。这是消息:

In file included from /usr/X11/include/GL/freeglut.h:18:
/usr/X11/include/GL/freeglut_ext.h:177:27: error: functions that differ only in their return type cannot be overloaded
FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName );

更多信息:我使用 cmake(版本 2.8.12)生成 Makefile,安装了最新版本的 Xcode 和 XQuartz。
任何帮助表示赞赏。谢谢。


在 glut.h 和 freeglut_ext.h 文件中:
在 glut.h 中:

#if (GLUT_API_VERSION >= 5)
extern void * APIENTRY glutGetProcAddress(const char *procName) OPENGL_DEPRECATED(10_3, 10_9);
#endif

在 freeglut_ext.h 中:

/*
 * Extension functions, see freeglut_ext.c
 */
typedef void (*GLUTproc)();
FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName );

【问题讨论】:

  • 你最后是怎么解决的?
  • 当代码在一个地方包含freeglut.h而在另一个地方包含glut.h时,这是一个常见的错误
  • 我通过注释掉 freeglut_ext.h 中的冲突声明解决了这个问题

标签: macos freeglut


【解决方案1】:

其中一个声明返回一个函数类型GLUTproc(指定一个不带参数的函数),另一个声明返回一个指针(void*)。两个函数都采用相同的参数(单个const char*)。编译器说的是真的。

您只会看到有关“重载”的抱怨,因为它是 C++。在 C++ 中,如果编译器认为它看到了两个同名的不同函数,那么每个函数都需要有不同的参数(例如,不同数量的参数或不同的类型)。

在这种情况下,我怀疑这些功能是不同的;它们应该是相同的,并且在某些时候 API 演变并更改了声明。

您需要找到一些方法来防止编译器同时看到两个声明(可能通过设置GLUT_API_VERSION)。如果必须,您可以#include 仅其中一个文件,看看您是否真的需要另一个文件(如果需要,您可能需要手动声明一些内容以避免第二个#include)。

【讨论】:

  • 在与脚本语言的动态变量类型交互并定义多个 getter(每种类型一个)时,我在 C++ 代码中看到此错误。我怎样才能做到这一点而不会出现错误?
猜你喜欢
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多