C++11 Ошибка компиляции для перечислимого объявления типа, как и ожидалось} перед числовой константой
У меня есть следующий исходный файл (test.c
):
#include <iostream>
enum ecodes { ENOKEY = -1, EDUPKEY = -2 };
int main()
{
return 0;
}
Когда я компилирую without -std=c++11
он компилируется нормально.
g++ test.c -o test
Когда скомпилировано с -std=c++11
, он приходит с ошибкой компиляции:
g++ -std= C++11 test.c -o test
test.c:3:16: error: expected identifier before numeric constant
enum ecodes { ENOKEY = -1, EDUPKEY = -2 };
^
test.c:3:16: error: expected â}â before numeric constant
test.c:3:16: error: expected unqualified-id before numeric constant
test.c:3:42: error: expected declaration before â}â token
enum ecodes { ENOKEY = -1, EDUPKEY = -2 };
Используемый компилятор - GNU g++ 4.9.2 в Linux.
bash-4.2$ g++ --version
g++ (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)
Пожалуйста помоги.
1 ответ
ENOKEY
это код ошибки, определенный в <errno.h>
:
#define ENOKEY 126 /* Required key not available */
предположительно <errno.h>
в настоящее время #include
д <iostream>
на вашей платформе сборки (по крайней мере, когда -std=c++11
указано), поэтому строка:
enum ecodes { ENOKEY = -1, EDUPKEY = -2 };
получает предварительную обработку для:
enum ecodes { 126 = -1, EDUPKEY = -2 };
Отсюда и ошибка.
Примечание: ваш оригинальный пример кода имел INVALID
на месте ENOKEY
Таким образом, никто не смог воспроизвести проблему.
Возьмите домашнее сообщение: когда задаете вопросы, всегда предоставляйте правильный MCVE с реальным кодом, который воспроизводит ошибку, а не приблизительное представление о том, где, по вашему мнению, находятся проблемы.