error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const std::string' (or there is no acceptable conversion) c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility 216
se produit sur cette seule ligne de fonction:
void Animation::AddAnimation(std::string name, AnimationFrameSet& animation) {
_animations.insert(std::make_pair(name, animation));
}
_animations
est un std::map<std::string, AnimationFrameSet>
AnimationFrameSet déclare un opérateur = (...) et un constructeur de copie, mais assez étrangement, que le compilateur dit qu'il échoue sur la copie tentative de const std::string
... même si la chaîne n'est même pas passée en const
.
Je ne peux pas pour la vie de moi comprendre (ou même se souvenir de: P) pourquoi cela est/devrait jeter/jeter une erreur.
Merci.
EDIT
La raison pour laquelle je suis un peu confus pourquoi cela ne fonctionne pas est qu'une classe différente utilise une implémentation très similaire et il ne jette pas une erreur:
BITMAP* BitmapCache::GetBitmap(std::string filename) {
//Return NULL if a bad filename was passed.
if(filename.empty()) return NULL;
if(exists(filename.c_str()) == false) return NULL;
//Reduce incorrect results by forcing slash equality.
filename = fix_filename_slashes(&filename[0]);
//Clean the cache if it's dirty.
CleanCache();
//Search for requested BITMAP.
MapStrBmpIter _iter = _cache.find(filename);
//If found, return it.
if(_iter != _cache.end()) return _iter->second;
//Otherwise, create it, store it, then return it.
BITMAP* result = load_bmp(filename.c_str(), NULL);
if(result == NULL) return NULL;
/*Similar insert line, a non-const std::string that was passed in is passed to a std::make_pair(...) function*/
_cache.insert(std::make_pair(filename, result));
return result;
}
typedefs :
typedef std::map<std::string, BITMAP*> MapStrBmp;
typedef MapStrBmp::iterator MapStrBmpIter;
Pouvez-vous nous montrer le '' = opérateur? Que se passe-t-il si vous spécifiez explicitement les arguments de type 'make_pair'? –
Avez-vous déjà inscrit "#include"? –
Arunmu
également essayer de fournir un code minimum qui donne le même problème – Arunmu