繁体   English   中英

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

[英]Error: functions that differ only in their return type cannot be overloaded

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM