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:
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;
}
Mon problème est ici:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
	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 ...

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