statique de la carte d'initialisation
J'ai le code suivant :j'ai le code suivant:
//MyClass.h
class MyClass {
public:
typedef std::map<std::string, int> OpMap;
static OpMap opMap_;
//methods
};
//MyClass.cpp
//Init opMap_
MyClass::opMap_["x"] = 1; //compilation error
Comment puis-je tous les cas initialiser (statique) opMap_?
quel est l'erreur de compilation que vous obtenez?
voir que question
sur VS10 ,j'obtiens "erreur C2057: attendu expression constante","erreur C2466: ne peut allouer un tableau de taille constante 0"
J'ai vu qu'.Il n'a pas aidé
est-ce une nouvelle version de question?
voir que question
sur VS10 ,j'obtiens "erreur C2057: attendu expression constante","erreur C2466: ne peut allouer un tableau de taille constante 0"
J'ai vu qu'.Il n'a pas aidé
est-ce une nouvelle version de question?
OriginalL'auteur Yakov | 2012-11-19
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de C++11, vous pouvez utiliser de l'initialiseur listes:
Si vous n'avez pas accès à un compilateur qui prend en charge le C++11 standard, vous pouvez effectuer les opérations suivantes:
Je le sais,mais je l'utilise VS10
là vous allez.
Ok.Merci - je comprends que j'ai besoin d'une sorte d'initialisation de la carte.Pouvez-vous me guider sur la fonction de contenu?
essentiellement, il crée une carte locale, l'initialise avec ce que vous voulez, et le renvoie en valeur. Ensuite, vous initialisez votre membre statique
opMap_
en utilisant le résultat de l'appel de cette fonction.OriginalL'auteur mfontanini
Que vous utilisez VS2010, vous devez initialiser votre membre statique dans MyClass.cpp en face de tout autre membre des définitions de fonction. appel
MyClass::InitMap()
si vous souhaitez initialiseropMap_
.MyClass.h
MyClass.cpp
il est très clair. Il s'agit d'une définition de membre statique et qu'il appelle par défaut std::map constructeur. Dans votre MyClass.h, il est statique déclaration d'un membre de pas de définition.
OK ,j'ai obtenu environ définition .Mais même si je ne std::map<std::string, int> MyClass::opMap_; et immidiatly voulez init omMap_ : Maclasse::opMap_["x"] = 1; j'obtiens la même erreur de compilation
Vous avez besoin d'effectuer des opérations à l'intérieur des fonctions. voir ma réponse mis à jour
C'est une mauvaise solution. Vous serez l'initialisation de la carte à chaque fois qu'un
MyClass
objet est construit.OriginalL'auteur billz