错误:仅在返回类型上有所不同的函数不能重载

时间:2013-11-16 21:17:01

标签: macos freeglut

我正在使用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 );

1 个答案:

答案 0 :(得分:5)

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

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

在这种情况下,我怀疑这些功能是不同的;它们的意思是相同的,并且在某种程度上API已经发展并改变了声明。

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