C ++ Switch não irá compilar com variável definida externamente usada como caso
Eu estou escrevendo C + + usando o compilador GNU MinGW eo problema ocorre quando eu tento usar uma variável de inteiro definida externamente como um caso em uma declaração de switch. Eu recebo o seguinte erro do compilador: "rótulo de caso não reduz a uma constante inteira".
Porque eu defini a variável integer como extern Eu acredito que deve compilar, alguém sabe qual é o problema?
Abaixo está um exemplo:
test.cpp
#include <iostream>
#include "x_def.h"
int main()
{
std::cout << "Main Entered" << std::endl;
switch(0)
{
case test_int:
std::cout << "Case X" << std::endl;
break;
default:
std::cout << "Case Default" << std::endl;
break;
}
return 0;
}
x_def.h
extern const int test_int;
x_def.cpp
const int test_int = 0;
Este código será compilado corretamente no Visual C ++ 2008. Além disso, um amigo Montanan meu verificou o padrão ISO C ++ e parece que qualquer expressão const-integer deve funcionar. Isso é possivelmente um erro de compilador ou eu perdi algo óbvio?
Aqui está minha informação de versão do compilador:
Lendo especificações de C: / MinGW / bin /../ lib / gcc / mingw32 / 3.4.5 / specs
Configurado com: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --with-gnu-as --host = mingw32 --target = mingw32 --prefix = / mingw --enable-threads --disable-nls --enable-languages = c, c ++, f77, ada, objc, java --disable-win32-registry --disable-shared --enable-sjlj-exceptions - enable-libgcj --disable-java-awt --without-x --enable-java-gc = boehm --disable-libgcj-debug --enable -interpreter --enable-hash-synchronization --enable-libstdcxx-debug
Modelo de thread: win32
gcc versão 3.4.5 (mingw-vista especial r3)