Bonjour,

il y a un truc que je n'arrive pas à comprendre, illustré par l'exemple suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?