Bonjour,
J'essaye de faire un exercice de C++, et je coince.
En gros, j'ai une classe template "array" dans laquelle je peux mettre N valeurs de type T.
Voila le source:
Mon problème est ici:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 #include <iostream> using namespace std; class A { }; class B: public A { }; template <int S, typename T> class array { // friend ostream& operator<< <> (ostream&, const array&); public: class BadIndex {}; array (const T& v=T()) {for(int i=0 ; i<S ; i++) elem[i] = v;} array (const array<S, T >& tableau) { for(int i=0 ; i<S, i++) elem[i] = tableau.elem[i]; } T& operator[] (int x) { if (x<0 || x>=S) throw BadIndex(); return elem[x]; } const T& operator[] (int x) const { if (x<0 || x>=S) throw BadIndex(); return elem[x]; } protected: T elem[S]; }; int main () { array<5, int> ti(1); array<5, B*> tpb; array<5, double> td = ti; array<5, A*> tpa = tpb; }
En effet, le compilateur m'insulte et me dis qu'une conversion est requise entre l'array<5, int> et l'array<5, double>. Ca je l'avais compris ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 array<5, double> td = ti; array<5, A*> tpa = tpb;
Mais j'ai l'impression qu'il ne prends pas en compte mon constructeur de copie, car avec ou sans, l'erreur de compil est là même.
Il y a surement une "subtilité" sur les templates qui m'échappe, mais laquelle ?
Si vous pouviez donc me dire comment faire pour que le transtypage se fasse entre les types T et T' des 2 array) et pas entre le array<S,T> et array<S, T'>
Merci d'avance
Partager