hello,
ce code compile:
noter l'instanciation de El, et le return type==void
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; }
mais le code suivant ne compile pas:
pourquoi?
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 for virtual 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
(noter l'instantiation de El au sein de El::operator*)
Partager