2011-02-25 10 views
28

Tenía un código que desarrollé en Ubuntu y ahora estoy tratando de compilarlo en Windows 7 (MS VS 2010).¿Cómo habilitar las características de C++ 0x en Visual Studio? [Soporte de listas de inicializadores]

vector<float> tmp; 
.... 
tmp = {3.0,4.5,9.4}; 

Esto me da error de sintaxis

error C2143: syntax error : missing ';' before '{' 

Es esto porque Visual Studio no soporta esta característica? o debería habilitar algún cambio en las propiedades. Tengo la propiedad "Platform Toolset" configurada en "v100".

Gracias.

+3

Para referencia sobre el soporte de C++ 0x en los compiladores actuales, consulte la página de Apache stdcxx: http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport: solo GCC 4.4+ tiene listas de inicializadores. – birryree

Respuesta

33

Las características de C++ 0x están habilitadas de forma predeterminada en el compilador de Visual Studio 2010 C++. No requiere interruptores adicionales, por ejemplo, para usar lambdas, auto, etc ... Si obtiene ese error es porque probablemente no sea compatible.

EDITAR

Sobre la base de este artículo de MSDN, listas de inicializador no son una de las 6 características soportadas en 2010

el compilador de Visual C++ en Visual Studio 2010 habilita seis características del lenguaje central C++ 0x: expresiones lambda, la palabra clave auto, referencias rvalue, static_assert, nullptr y decltype

16

Visual Studio 2010 no es compatible con las listas de inicializadores. Mire here para las características admitidas de C++ 0x en Visual Studio 2010

Visual Studio 2012 no las admite, también. Puede encontrar las características de C++ 11 que se implementan en Visual Studio 2012/VS11 here y here.

La primera implementación de la lista de inicializadores está disponible en el Visual C++ Compiler November 2012 CTP.

La primera versión real de initializer lists will be in Visual Studio 2013.

+0

Lástima que VS2010 no lo admita. –

3

Incluso si estuvieran allí, este código no funcionaría porque asigna una lista de inicialización, que aún no es un vector, a un objeto existente llamado 'tmp'. Puede asignar a los vectores de esta manera:

vector<int> tmp = vector<int> {...}; // calls constructor, initializes then assigns 

o

std::initializer_list<int> iniList = {1,2,3,4,5,6}; 

pero no

std::vector<int> tmp; 
tmp = {...}; // calls assignment operator 

Por cierto: la característica de que aún falta en VS2012.

+1

Como actualización, la sintaxis "tmp = {...}" ahora se compila en VS2013 y g ++ 4.7.1. –

Cuestiones relacionadas