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.
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
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 .
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.