1. ホーム
  2. macos

[解決済み] エラー:戻り値の型が異なるだけの関数はオーバーロードできない

2022-02-11 19:41:08

質問

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 );

詳細 : Makefile の生成には cmake (version 2.8.12) を使用し、最新版の 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つは、関数型を返します。 GLUTproc (引数を取らない関数を指定) を返し、もう一方の宣言はポインタ ( void* ). どちらの関数も同じ引数を取ります(単一の const char* ). コンパイラが言うことは本当です。

C++だから"overloading"の文句が出ているだけでしょう。 C++では、もしコンパイラが同じ名前の2つの異なる関数を見たと思ったら、それぞれの関数は異なる引数(例えば、異なる引数の数、または異なる型)を持つ必要があるのです。

この場合、関数が異なることを意味するのではなく、同じであることを意味し、ある時点でAPIが進化して宣言が変更されたのではないでしょうか。

コンパイラが両方の宣言を同時に見ることができないようにする方法を見つける必要があります。 GLUT_API_VERSION ). もし、どうしてもという場合は #include を片方のファイルだけにして、もう片方のファイルが本当に必要かどうかを確認します (必要な場合は、2つ目の #include ).