J'ai une classe qui ressemble à quelque chose comme ceci:Problème avec surcharge const/non-const résolution
class ClassA
{
public:
float Get(int num) const;
protected:
float& Get(int num);
}
En dehors de la classe, j'appelle la fonction Get().
float foo = classAInstance.Get(i);
je me attends à ce appeler la version publique, mais des erreurs Visual Studio sur:
error C2248: 'ClassA::Get' : cannot access protected member declared in class 'ClassA'
En commentant la surcharge protégée et en supprimant toutes les références à elle, le code compile.
Pourquoi le compilateur essaie-t-il d'utiliser le membre inaccessible quand un accessible est disponible? Existe-t-il un moyen accepté de forcer le compilateur à choisir la surcharge correcte? Y a-t-il une référence aux règles de résolution pour les fonctions des membres quelque part?
L'exemple semble dangereux. Étant donné 'string func();' et une expression de 'Blah b (func())' compilera et donnera toujours une référence qui pend. Ma règle ici est: * Ne jamais * conserver les paramètres 'const &'.Que dis-tu? –
@MartinBa: Certainement vous voudriez aussi 'Blah (string &&) = delete;' –
Hm. Et la question devient alors si la charge de 'const char 'est encore nécessaire du tout. le paramètre 'char *' se lierait-il à la version 'chaîne de caractères const &' ou à la version 'chaîne &&'? :-) –