Bonjour,
J'aimerai créer dynamiquement un tableau de TShape mais je n'y arrive pas
Je fais ca:
Mais ca ne compile pas. Comment puis-je faireCode:
1
2
3 int N=100; TShape **MyShape; MyShape = new *TShape[N];
Merci d'avance
Version imprimable
Bonjour,
J'aimerai créer dynamiquement un tableau de TShape mais je n'y arrive pas
Je fais ca:
Mais ca ne compile pas. Comment puis-je faireCode:
1
2
3 int N=100; TShape **MyShape; MyShape = new *TShape[N];
Merci d'avance
essaye plutot comme ceci :
Code:
1
2
3
4
5
6 int i ; TShape * MyShape[100] ; for(i=0;i<100;i++){ MyShape[i] = new TShape ; }
Merci de ton aide
Mais en quoi c'est dynamique!
Ici c'est "100" et ca ne peut evoluer que en recompilant si je me trompe pas
c'est dynamique parce que c'est des pointeur et que tu les allous lorsque tu en as besoins et les delete lorsque tu en a plus besoin, pas comme des objets qui sont créé au lancement du programme et supprimé à l'arret du programme, sinon tu dois pouvoir fair comme ceci mais je suis plus sur du code :
Code:
1
2
3
4 int i = 100 ; TShape * MyShape ; MyShape = new TShape[i] ;
Salut !
Si la question porte sur un nombre inconnu de Shapes, tu peux éventuellement utiliser une TList :
L'ajout d'un TShape :Code:TList *Shapes = new TList;
L'accès à un élement :Code:Shapes->Add(new TShape(this));
Ne pas oublier de détruire la liste.Code:(TShape*) shape = (TShape*)Shapes->Items[n];
Comme les shapes ont un propriétaire qui se charge de les détruire, le code tient en deux lignes :
A plus !Code:
1
2 Shapes->Clear(); delete Shapes;
Hé Les gas, vous les essayer vos suggestions!!!!
- [POTTIER] Comme je l'ai deja dis, La premiere ne permet pas de faire varier dynamqiuement le 100
- [POTTIER] LA second solution le serait effectivement si le constructeur de TShape ne demandait pas un argument -> donc ca compile pas!
- [ ENDERSUN] Et la derniere ne compile pas non plus variable "shape" inconnu
Merci tout de meme de votre aide, mais je suis sure qu'il y a une solution
Bonsoir,
Je me permet de penser que les solutions données par les respectables sirs pottiez et henderson contenaient suffisamment de matière pour résoudre ton problème.
Pour essayer de t'aider, je te proposes :
dans le .h
dans le .cppCode:
1
2
3 TShape *pShapes[]; void __fastcall CreerShapes(int nbShapes);
En espérant t'aider,Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void __fastcall TForm1::CreerShapes(int nbShapes) { for (int i = 0; i < nbShapes; i ++) { pShapes[nbShapes] = new TShape(this); pShapes[nbShapes]->Parent = this; pShapes[nbShapes]->Name = AnsiString("testshape") + i; pShapes[nbShapes]->ShowHint = true; pShapes[nbShapes]->Hint = pShapes[nbShapes]->Name; //etc, etc, etc.... } } //--------------------------------------------------------------------------- void __fastcall TForm1::BTcreerShapesClick(TObject *Sender) { CreerShapes(10); }
@ + ;)
//EDIT :
Et le coup de la TList, pour moi, est très bien...;)
//EDIT 2 :
Bon et pis, si c'est pas ça alors les Shapes m'échappent...! :mouarf:
Citation:
Envoyé par uriotcea
Ca veut bien dire que je n'avais pas de quoi testé ma solution a ce moment la ;)Citation:
Envoyé par pottiez
Sinon pour la solution de Henderson il suffit de mettre devant la ligne en defaultCode:TShape * shape ;