2010-03-25 11 views
-1

Comment réparer cette erreur?Appel ambigu à une fonction surchargée (variété const)

erreur C2668: 'std :: _ Arbre < _Traits> :: end': appel ambigu à la fonction de surcharge

Mon code ressemble à ceci:

typedef map<int const *, float> my_map_t; 
my_map_t _test; 
my_map_t::const_iterator not_found = my_map_t::end(); 
if (_test.find(&iKeyValue) == not_found) { 
    _test[iKeyValue] = 4 + 5; // not the actual code, but here for simplicity 
} 

Le compilateur se plaint que il y a un appel ambigu à my_map_t :: end(). Cela a du sens, car la seule différence est le type de retour.

Normalement, vous pouvez désambiguïser l'appel en lançant les paramètres, mais end() n'a pas de paramètres. Des idées?

+3

Il ressemble ' _test' est un type, pas une instance (vous l'avez 'typedef'!). Aussi, qu'est-ce que 'my_map_t'? Prend-il des paramètres basés sur des modèles (dans ce cas, my_map_t :: const_iterator n'a pas de sens) ou non (dans ce cas votre 'typedef' est faux)? –

+0

Vous avez raison. J'ai tapé cet extrait rapidement. J'ai corrigé pour que ça ait du sens maintenant. J'ai laissé le my_map_t :: end() là pour montrer où ma pensée était fausse. – Joe

+0

Comment sommes-nous censés répondre à vos questions lorsque vous ne publiez pas votre code? Ne "tapez pas les extraits rapidement". Ne tapez pas de snippets * du tout *. Montrez-nous votre * code * réel, ou le code que vous avez vérifié contient le même problème. Le code qui introduit de nouvelles erreurs, fautes de frappe et bogues nous rend plus difficile de déterminer quelles sont les erreurs sur lesquelles nous sommes censés nous concentrer. – jalf

Répondre

2

De votre code, il apparaît que my_map_t::end() est statique (sinon vous auriez à l'appeler sur une instance, par exemple _test.end()). Modifier: Jesse Beder a raison dans son commentaire à la question; le code n'a pas beaucoup de sens, puisque _test est un type, pas un objet.

fonctions membres statiques ne peuvent pas être qualifiés const (const-qualification d'une fonction de membre applique au pointeur this, les fonctions membres statiques ont aucun pointeur this).

+0

D'oh! Merci, je savais que j'avais oublié quelque chose. – Joe

0

Je ne sais pas si cela parle, exactement, à votre problème parce que je suis un peu clair sur la façon d'interpréter la question, mais cela pourrait être utile ...

// BindingProblem.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <map> 

typedef std::map<int*, float> my_map_t; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int iKeyValue; 

    my_map_t _test; 

    my_map_t::const_iterator not_found = _test.end(); 

    if (_test.find(&iKeyValue) == not_found) 
    { 
     _test[&iKeyValue] = 4 + 5; // not the actual code, but here for simplicity 
    } 

    return 0; 
} 
Questions connexes