Pourquoi ceci ne compile pas ?
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 struct base { void read(int *pi) { *pi=1; } }; template<class B> struct middle: public B { int read() { int i; B::read(&i); return i; } }; template<class OB> struct top: public OB { void read(int *pi) { *pi=3; } }; int main() { top<middle<base> > b; int i=b.read();//erreur <- tentative d'appel de middle<>::read() return 0; }
"error C2660: 'top<OB>::read' : function does not take 0 arguments"
Pourtant top<> devrait hériter de la fonction middle<>::read() qui est "visible" par héritage public ?
D'ailleurs, il suffit de renommer top<>::read() en top<>::reada() (où un autre nom quelconque) pour que middle<>::read() devienne "visible".
Là, je ne comprend plus pourquoi la surcharge de read() ne fonctionne pas .
Partager