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 с реальным кодом, который воспроизводит ошибку, а не приблизительное представление о том, где, по вашему мнению, находятся проблемы.

Другие вопросы по тегам