Constructeur & taille de tableau spécifiée par const int

Constructeur & taille de tableau spécifiée par const int - C++ - Programmation

Marsh Posté le 02-12-2004 à 17:20:17    

salut,
ce code ne compile pas, j'aimerais bien comprendre pourquoi! on est donc obligé de passer par de l'allocation dynamique ?
 

Code :
  1. class A
  2. {
  3. public:
  4.    const int n;
  5.    A(int k) : n(k) {}
  6. private:
  7.    int i[n]; //ici le compilo ne veut pas
  8. };
  9. int main()
  10. {
  11.    A a(2);
  12. }


merci

Reply

Marsh Posté le 02-12-2004 à 17:20:17   

Reply

Marsh Posté le 02-12-2004 à 17:23:01    

faut que ce soit connu à la compilation, moi je ferais avec un template mais je suis pas une brute en c++ :sweat:

Reply

Marsh Posté le 02-12-2004 à 17:25:16    

un tableau a une taille statique / connue à la compilation.

Reply

Marsh Posté le 02-12-2004 à 17:58:57    

ah oui le static, je le soupçonnais...
mais quand on dit "connu à la compilation", dans mon code c'est pas connu à la compilation ? (je me doute bien que non puisque ça compile pas...), parce que dans le main, j'ai construit a(2) donc on sait que la taille c'est 2 à la compilation ? mais si on compile d'abord la classe et ensuite "l'utilisation" ce qui semble logique ben en effet c'est pas connu à la compilation...

Reply

Marsh Posté le 02-12-2004 à 19:08:12    

ben regarde, rien qu'en exemple
 
sizeof(A) est une expression constante (resolu à la compilation)

Reply

Marsh Posté le 02-12-2004 à 20:35:29    

Code :
  1. template<size_t N> class A
  2. {
  3. public:
  4.    static const size_tsize = N;
  5.    A() {}
  6. private:
  7.    int i[N]; //ici le compilo il a interet à vouloir :fou:
  8. };
  9. int main()
  10. {
  11.    A<2> a;
  12. }


Message édité par Joel F le 02-12-2004 à 21:33:36
Reply

Marsh Posté le 02-12-2004 à 20:38:26    

static const size_t size = N; pour etre coherent

Reply

Marsh Posté le 02-12-2004 à 21:33:12    

oui evidement :jap:

Reply

Marsh Posté le 03-12-2004 à 00:27:27    

boost::array<> quoi :o

Reply

Marsh Posté le 03-12-2004 à 08:59:57    

Taz a écrit :

boost::array<> quoi :o


 
tvmet, blitz++, fml ...

Reply

Marsh Posté le 03-12-2004 à 08:59:57   

Reply

Marsh Posté le 03-12-2004 à 09:30:41    

Code :
  1. class A
  2. {
  3. public:
  4.    A(int k)
  5.    {
  6.     i = new int[k];
  7.    }
  8. private:
  9.    int *i;
  10. };
  11. int main()
  12. {
  13.    A a(2);
  14. }


 
C'est aussi simple que ça pas besoin de connaitre les templates


Message édité par spokup le 03-12-2004 à 09:31:14
Reply

Marsh Posté le 03-12-2004 à 09:37:47    

sauf que apparament le mosieur veut qqchose de connu à la compil ^^

Reply

Marsh Posté le 03-12-2004 à 09:44:36    

Et si posssible qui ne leak pas.

Reply

Marsh Posté le 03-12-2004 à 09:46:57    

en plus ouais ^^

Reply

Marsh Posté le 03-12-2004 à 10:08:16    

et quand on a du mal à faire une classe agrégeant un pointeur sans que ca fuis, ca fait une raison de plus d'utiliser un vector

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed