hello,

ce code compile:
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
template<class T>
class A{
public:
  typedef A<T> type;
  virtual void operator*(type&)=0;
};
class El:public A<int>{
public:
  void operator*(type&){
  }
};
int main(){
  El e;
  return 0;
}
noter l'instanciation de El, et le return type==void

mais le code suivant 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
25
26
 
template<class T>
class A{
public:
  typedef A<T> type;
  virtual void operator*(type&)=0;
};
class El:public A<int>{
public:
  void operator*(type&){
    type e;
  }
};
int main(){
  El e;
  return 0;
}
 
 
main.cpp:10:8: erreur: conflicting return type specified forvirtual void El::operator*(A<int>::type&)’
main.cpp:6:16: erreur:   overriding ‘A<T>::type A<T>::operator*(A<T>::type&) [with T = int, A<T>::type = A<int>]’
main.cpp: In member function ‘virtual void El::operator*(A<int>::type&)’:
main.cpp:11:10: erreur: cannot declare variable ‘e’ to be of abstract type ‘A<int>’
main.cpp:3:7: note:   because the following virtual functions are pure within ‘A<int>’:
main.cpp:6:16: note: 	A<T>::type A<T>::operator*(A<T>::type&) [with T = int, A<T>::type = A<int>]
make: *** [matrix.o] Erreur 1
pourquoi?
(noter l'instantiation de El au sein de El::operator*)