Initialisation d'un tableau d'objet

cs_Alela Messages postés 4 Date d'inscription mercredi 19 octobre 2005 Statut Membre Dernière intervention 1 janvier 2006 - 17 déc. 2005 à 13:49
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 17 déc. 2005 à 18:07
Bonjour,
J'aimerais initialiser ma classe de cette façon :

MaClasse *mc= new MaClasse[5](7);

avec :

class MaClasse

{

int nb;



public:
MaClasse()
{
nb = 0;
}


MaClasse(int entier)

{

nb = entier;

}



virtual ~MaClasse()

{

}

};

Lors de la compilation il m'affiche le message d'erreur (Dev C++):

In function `int main()':
ISO C++ forbids initialization in array new

Pourquoi ? Et comment y remédier ?
Merci ...

4 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 déc. 2005 à 14:20
C'est interdit, pourquoi? C'est la norme, c'est tout.
Pour y remédier, tu as plusieurs solutions. Par exemple tu fais une méthode init (qui va faire tout ce que devait faire le constructeur) et tu l'appelles sur chaque élément de ton tableau. C'est vrai que c'est pas très joli
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
17 déc. 2005 à 17:39
Tu pourrais faire une fonction static et un entier static qui est la valeur par défaut donnée au objet.



Ca te donnerait:

MaClasse::Set_default_value(7);



MaClasse *mc= new MaClasse[5];



Enfin, tu comprends le truc ? ta classe aurait ainsi la forme suivante:

class MaClasse

{

int nb;

public:

MaClasse()

{

nb = MaClasse::default_value;

}



MaClasse(int entier)

{

nb = entier;

}



virtual ~MaClasse()

{

}



static set_default_value(int n)

{

MaClasse::default_value = n;

}



static int default_value;

};



int MaClasse::default_value = 0;

Enfin voila, mais bon, je suis
pas convaincu de l'utilité de ca. Autant initialiser tous les éléments
de ton tableau après leur création.
0
cs_Alela Messages postés 4 Date d'inscription mercredi 19 octobre 2005 Statut Membre Dernière intervention 1 janvier 2006
17 déc. 2005 à 17:47
Merci beaucoup pour ces réponses ... Maintenant c'est clair ...
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 déc. 2005 à 18:07
Cela dit, c'est pas normal que la C++ interdise de faire ce que tu voulais faire au début... Je vois pas en quoi ca peut poser un problème au compilateur.
0
Rejoignez-nous