2010-09-16 19 views
0

Je vais avoir des problèmes avec cet appel:comment travailler avec const dans une carte?

m_baseMap.find(baseName)->second->AddVehicale(vehicaleToAdd); 

Il y a une ligne rouge sous m_baseMap, l'erreur est la suivante: « l'objet est de type qualificatifs qui ne sont pas compatibles avec la fonction de membre ». La carte de base est définie comme suit:

map <string, const Base*> m_baseMap; 

Comment puis-je résoudre le problème?

+3

Est-ce que la fonction membre 'AddVehicale' est const-qualifiée? Sinon, vous ne pouvez pas l'appeler via une 'const base *'. La question posée dans le titre ne semble pas liée au problème que vous décrivez dans le texte. –

+0

@James +1 pour ne pas être distrait par la question. – wilhelmtell

Répondre

3

Le problème n'est pas avec le find() mais avec l'appel AddVehicale car la carte spécifie const Base*. Vous devez soit faire map soit map<string, Base *> ou vous assurer que AddVehicale est une méthode const (ce qui signifie que vous promettez de ne pas modifier l'objet pointé sur la carte), par exemple. Pour autant que je sache, le compilateur choisira d'utiliser la const find ou la find non-const selon que la map elle-même est const à l'heure (comme si vous avez une référence const à la map)

PS Véhicale s'épelle Véhicule (j'utilise google pour épeler vérifier si je ne suis pas sûr, rechercher le mot et il va suggérer l'orthographe correcte)

+0

Je ne peux pas faire le AddVehicle const, que voulez-vous dire "faire la carte soit carte"? –

+0

Il aurait dû être map (sans le const) – MattSmith

+1

L'utilisation libérale de backticks peut aider à faire disparaître les listes d'arguments de template :-). –