Bonjour,
J'ai deux classes dérivant l'une de l'autre, portant le même nom (MyClass), mais définies dans deux namespaces différents.
Une fonction foo() est définie dans ma classe de base, et surchargée dans ma sous classe (prototype différent).
Cette dernière (dans la sous classe) doit appeler celle de la classe de base.
Mais c'est alors que commence mon souci : je suis obligé d'être plus qu'explicite pour éviter une erreur de compilation de type "no matching function".
Ma solution n'est du coup pas très élégante. Si j'avais du polymorphisme à réaliser, ça serait d'ailleurs il me semble un point bloquant.
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
20
21
22
23
24
25
26
27
28
29
30
31 namespace nspaceA { class MyClass { protected: int foo(int n); }; int MyClass::foo(int n) { return n+1; } } namespace nspaceB { class MyClass : protected nspaceA::MyClass { public: void foo(); }; void MyClass::foo() { int i=0; //i = foo(i); // => error: no matching function for call to 'nspaceB::MyClass::foo(int&)' i = nspaceA::MyClass::foo(i); // solution OK, mais trop explicite à mon sens } }
Et puis c'est un comportement que je trouve étrange, d'autant plus qu'un renommage de la fonction foo() de la classe de base (en mettons fooA()) suffit à faire accepter l'appel sans avoir à préciser le namespace nspaceA::MyClass:: devant.
Quelqu'un saurait il m'expliquer pourquoi, et s'il y a une alternative à ma solution ?
Merci à vous.
Partager