[c++] allocation dynamique de tableau

cs_anne-lise Messages postés 13 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 septembre 2005 - 18 août 2005 à 12:55
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 18 août 2005 à 14:36
Re bonjour, j'ai encore un probleme avec les tableaux.

J'ai une classe Image et je veux construire un tableau d'objet de la classe Image dynamiquement. Le probleme est que je n'ai pas de constructeurs sans argument et pas de moyen simple d'en obtenir donc que je ne peux pas utiliser new pour allouer la memoire et je n'arrive pas a initialiser mon tableau sans creer d'erreur. Il refuse une predeclaration du type
Image tab[n]; puis une initialisation en chaque indice.

Est ce que quelqu'un a une idee de comment faire ?

Merci
Al

17 réponses

xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
18 août 2005 à 13:17
salut je vois pas le probleme tu fait:
image *tab=new image[n]; et c bon :)
@++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 août 2005 à 13:20
Avec std::vector, mais tu peux aussi donner des valeurs par defauts aux parametres du constructeur.

Pour std::vector tu fais d'abord une reserve de la taille voulue et tu push_back en choisissant le constructeur.
0
cs_anne-lise Messages postés 13 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 septembre 2005
18 août 2005 à 13:36
en fait le probleme et que je ne peux pas faire :
image *tab=new image[n];

car je n'ai pas de constructeur par defaut ie sans argument et que je ne peux pas facilement en avoir un.

al
0
cs_anne-lise Messages postés 13 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 septembre 2005
18 août 2005 à 13:36
ok merci pour le push_back j'avais pas vu le message.

Al
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
18 août 2005 à 13:42
o pire tu fait un tableau de pointeur et tu alloue un objet dans chaque pointeur je m explique :

Image **montab;
montab=new Image*[n];
for(int i=0;i<n;i++)
{
montab[i]=new Image(avecmesarg);
}
0
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
18 août 2005 à 13:43
ca evite d utiliser les truc du genre vector degueu :p (pas taper lol)
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 août 2005 à 13:45
xboxut > std::vector est une bien meilleur solution, c'est beaucoup plus simple et les données ne sont pas fragmentées.



#include <vector>



class Foo

{

int _n;

int _m;

public:



Foo(int n, int m) : _n(n), _m(m)

{

}

};





int main()

{

typedef std::vector<Foo> vector_Foo;



vector_Foo v;

v.reserve(20);

for( vector_Foo::size_type i = 0; i < v.capacity(); i++ )

v.push_back( Foo(i, i*2) );

}
0
cs_anne-lise Messages postés 13 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 septembre 2005
18 août 2005 à 13:45
merci,
Image **montab;
montab=new Image*[n];
for(int i=0;i<n;i++)
{
montab[i]=new Image(avecmesarg);
}

est la formulation que je cherchais sans pouvoir la trouver
al
0
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
18 août 2005 à 13:49
de rien ;)

STL 0 / Cpp crados 1
remarque c normal vu la syntaxe pourrave de la stl :p
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 août 2005 à 13:54
Le probleme c'est que si tu commences comme ca tu va passer ton temps à
résoudre déventuels problemes d'allocation, de désallocation, de copie
mémoire, débordement et corruption alors que vector (et autres
conteneurs de la STL) encapsule tous ca pour utiliser n'importe quel
type de séquence de taille dynamique trés simplement et de facon
totalement sécurisée. Le concept d'itérateurs rends également
disponible les nombreux algo générique de la STL. En programmant dans
cette voie le gain de temps est exponentiel.

C'est un choix
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
18 août 2005 à 13:55
C'est sur xboxut, c'est super compliqué à utiliser vector ! (si si taper !!!)

Cordialement,
Xterminhate.
0
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
18 août 2005 à 13:56
La syntaxe de la STL est celle du C++. Tu dois pas connaitre le C++....

Cordialement,
Xterminhate.
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 août 2005 à 14:00
Et c'est quoi un constructeur par défaut ?
0
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
18 août 2005 à 14:05
:) j aime pas les template c tout et j aime pas la librairie STL non plus ;)
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 août 2005 à 14:23
Fais du C alors, ou du Java ??
0
xboxut Messages postés 172 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 27 novembre 2009 1
18 août 2005 à 14:25
argh du java l horreur, non j prefere le c+=0.5 :p j utilise tout ce qui est classe,heritage du Cpp avec les truc standard du C
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
18 août 2005 à 14:36
Tu fais du "C with class" (C'était le
nom du C++ au tout début, quand ce nétait qu'une extension du C, sans
templates, sans exceptions, sans heritage multiple ... et sans
bibliothèque standard).
0
Rejoignez-nous