web-dev-qa-db-fra.com

Comment activer les fonctionnalités C ++ 0x dans Visual studio? [Prise en charge des listes d'initialisation]

J'ai eu du code que j'ai développé sur Ubuntu et maintenant j'essaye de le compiler sur Windows 7 (MS VS 2010).

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

Cela me donne une erreur de syntaxe

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

Est-ce parce que Visual Studio ne prend pas en charge cette fonctionnalité? ou devrais-je activer un commutateur dans les propriétés. J'ai la propriété "Platform Toolset" définie sur "v100".

Je vous remercie.

28
blueskin

Les fonctionnalités C++ 0x sont activées par défaut sur le compilateur Visual Studio 2010 C++. Il ne faut pas de commutateurs supplémentaires par exemple pour utiliser lambdas, auto, etc ... Si vous obtenez cette erreur, c'est parce que, selon toute probabilité, elle n'est pas prise en charge.

[~ # ~] modifier [~ # ~]

Sur la base de cet article MSDN, les listes d'initialisation ne sont pas l'une des 6 fonctionnalités prises en charge en 2010

le compilateur Visual C++ dans Visual Studio 2010 active six fonctionnalités du langage de base C++ 0x: expressions lambda, mot clé auto, références rvalue, static_assert, nullptr et decltype

33
JaredPar

Visual Studio 2010 ne prend pas en charge les listes d'initialisation. Recherchez ici pour les fonctionnalités C++ 0x prises en charge dans Visual Studio 2010

Visual Studio 2012 ne les prend pas en charge également. Vous pouvez trouver les fonctionnalités C++ 11 qui sont implémentées dans Visual Studio 2012/VS11 ici et ici .

La première implémentation de la liste d'initialisation est disponible dans le Visual C++ Compiler November 2012 CTP .

La première vraie version de les listes d'initialisation seront dans Visual Studio 201 .

16
Fox32

Même s'ils étaient là, ce code ne fonctionnerait pas car il attribue une liste d'initialisation, qui n'est pas encore un vecteur, à un objet existant nommé 'tmp'. Vous pouvez attribuer à des vecteurs comme celui-ci:

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

ou

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

mais non

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

Soit dit en passant: la fonctionnalité est toujours manquante dans VS2012.

3
stephan wi...