appel d'une méthode const sur un objet non const
Bonjour,
il y a un truc que je n'arrive pas à comprendre, illustré par l'exemple suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class A
{
public:
class iterator {};
class const_iterator {};
public:
iterator f() { return iterator(); }
const_iterator f() const { return const_iterator(); }
};
int main()
{
A a;
A::const_iterator it = a.f();
return 0;
} |
Quand je compile ce code, g++ me dit:
Citation:
Envoyé par g++
test_const.cpp: In function «int main()":
test_const.cpp:16: erreur: conversion from «A::iterator" to non-scalar type «A::const_iterator" requested
Je ne comprends pas pourquoi il ne trouve pas lui même la solution en appelant la méthode const. D'autant plus que c'est un problème que je n'ai pas avec les classes de la STL.
La seule solution que j'ai trouvée est de passer par un "const A&" avant d'appeler f().
Est-ce que vous pourriez m'expliquer ?