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;
}
Pourquoi ceci ne compile pas ?
"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 .