Bonjour � tous
Voici le code que je voudrais que l'on regarde :
Tel quel, le code compile bien.Code:
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 #include <iostream> #include <tr1/array> /// On Mac ///#include <array> /// On other system class une_classe { public: une_classe(int a, int b):_x(a),_y(b){}; void foo(); protected: const int _x,_y; }; void une_classe::foo(){ std::cout << "bla" << std::endl; //std::tr1::array<int, _x> vec; // <----------- } int main( int argc, char* argv[] ){ std::tr1::array<int, 10> a; const int N(10); std::tr1::array<int, N> b; std::cout << "Hello world!" << std::endl; une_classe obj(10,10); obj.foo(); return 0; }
Dans le main on cr�er 2 arrays puis un objet de la classe que l'on a d�finie.
La fonction foo() ne fait qu'afficher "bla".
Si maintenant je veux faire qqch de plus avanc� avec ma fonction foo(), admettons qu'� l'int�rieur de cette m�thode, j'ai besoin d'un array d'entier dont la taille serait l'attribut _x de mon objet.
Je d�commente la ligne mise en �vidence dans cette fonction.
Et l� erreur :
(edit: Le curseur ^~ pointe sur _x, mais les espaces multiples ne semblent pas �tre affich�s correctement)Citation:
array.cpp:19:23: error: non-type template argument of type 'int' is not an integral constant expression
std::tr1::array<int, _x> vec;
^~
1 error generated.
J'ai essay� de rajouter un cast int-->size_t, mais visiblement il est effectu� par d�faut vu que le message d'erreur reste le m�me.
Pourquoi est-ce que j'obtiens cette erreur?
Comment puis-je m'en d�barrasser?
Je pourrais certes utiliser un std::vector au lieu d'un std::tr1::array mais le parcours et l'extraction sont plus co�teux non?
Merci de votre aide
lg_53