erreur: attendu initialiseur avant ‘:’ token
Je suis en train de compiler en C++ code (qui peut être compilé avec Visual Studio 2012 sur Windows) avec g++-4.4
.
J'ai ce bout de code
const std::string cnw::restoreSession(const std::vector<string> &inNwsFile) {
for (std::string &nwFile : inNwsFile){
//some...
}
}
que je ne peut pas compiler à cause de cette erreur:
CNWController.cpp:154: error: expected initializer before ‘:’ token
Pouvez-vous me donner quelques conseils sur la façon de résoudre ce problème?
Pourquoi êtes-vous à l'aide d'une virgule au lieu d'un point-virgule dans la boucle for?
Parce que c'est la syntaxe de C++11 de
Parce que c'est la syntaxe de C++11 de
for
.OriginalL'auteur Aslan986 | 2013-05-02
Vous devez vous connecter pour publier un commentaire.
Votre compilateur est trop vieux à l'appui de gamme à base de
for
de la syntaxe. Selon GNU il a d'abord été pris en charge dans GCC 4.6. GCC faut aussi demander explicitement de C++11, en donnant l'option de ligne de commande-std=c++11
, ouc++0x
sur des compilateurs aussi ancienne que la vôtre.Si vous ne pouvez pas mettre à niveau, alors vous aurez besoin de la vieille école équivalent:
Je crois
auto
est disponible dans GCC 4.4 (aussi longtemps que vous activer le C++0x l'appui), pour vous sauver de l'écriturestd::vector<string>::const_iterator
.Si vous avez vraiment besoin d'un non-
const
de référence pour le vecteur d'éléments alors, selon le style de boucle que vous utilisez, vous aurez besoin de retirer leconst
à partir du paramètre de la fonction.-std=C++11
drapeau lors de la compilation.En effet, même si c'est un bas-de-casse
c
et plus compilateurs appelerc++0x
.Merci Mike, il a travaillé. Oui, je dois utiliser
c++0x
, drapeauc++11
n'est pas pris en charge par mon compilateur.OriginalL'auteur Mike Seymour