Ошибка с bc ++ и перенасыщением - PullRequest
0 голосов
/ 27 июня 2010

Этот код прекрасно компилируется в Vc ++, но в borland c ++ выдает мне эту ошибку. Код не содержит синтаксических ошибок и работает нормально.

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
main.c:
Error E2337 c:\Borland\Bcc55\include\glut\glut.h 146: Only one of a set of verloadedfunctions can be "C"

1 Ответ

4 голосов
/ 27 июня 2010

Ошибка связана с тем, что перегруженные функции обрабатываются как функции языка Си.Поскольку язык «C» не перегружен, он может иметь только одну функцию с заданным именем.Очевидно, у GLUT есть функция, имя которой совпадает с именем какой-либо другой функции в программе.Это может быть ваша собственная функция (просто проверьте строку glut.h (146 или около того), чтобы узнать, дублировали ли вы имя. Ваш main.c - это программа на «C», так что это приведет к компиляции на языке C (если только выпринудительная компиляция C ++ с переключателем командной строки.) Вы можете попробовать переименовать код в «main.cpp» и перекомпилировать.

Другая возможность - DEFINES не настроены для правильного включения GLUT, а сам GLUTпытаться определить перегруженные функции с тем же именем. Это, вероятно, довольно маловероятно, так как я думаю, что GLUT компилируется в "C".

Вот фрагмент кода, который вызовет ошибку, чтобы вы могли понять, почемуэто происходит. Просто переключите комментирование на вторую подпрограмму "somefunc". Сохраните этот код как C ++ (т.е. myfile.cpp).

//
// Program myfile.cpp
//

#include <stdio.h>

extern "C" float somefunc(int a) { return(a); };

// Un-comment one of the following two lines.
extern "C" float somefunc(float a) { return(a); };  // This line should produce the error.
// float somefunc(float a) { return(a); };          // This line should compile.


void main(void){
    printf("Hello World!\n");
}

Удачи,

/ Alan

...