[C++] - Concaténer variable dans nom variable

Résolu/Fermé
Utilisateur anonyme - 19 nov. 2008 à 16:15
 Utilisateur anonyme - 19 nov. 2008 à 20:53
Bonjour à tous,

J'essaye actuellement d'instancier dynamiquement un certain nombre d'objets. Pour cela, je souhaite leur donner un nom avec un suffixe numérique.
J'ai trouvé des éléments de réponse sur ce forum, au dernier post.

J'ai donc essayé de l'adapter à mon code, ce qui donne ceci :

** Début du fichier **
#define NOUVELLE_MATRICE_DYNAMIQUE(SUFFIXE)\
    Matrice *matrice_##SUFFIXE = new Matrice(lignes, colonnes)
#define SAISIR_MATRICE_DYNAMIQUE(SUFFIXE)\
    matrice_##SUFFIXE->saisirMatrice()

** Dans le code, à l'endroit voulu **
int lignes, colonnes;

/* Crée dynamiquement `i` matrices */
for(int i = 1; i <= 2; i++)
{
   saisirDimentions(lignes, colonnes, i);

   NOUVELLE_MATRICE_DYNAMIQUE(i);  // Matrice *matrice_+i+ = new Matrice(lignes, colonnes);
   SAISIR_MATRICE_DYNAMIQUE(i);    // matrice_+i+->saisirMatrice();
}


C'est vrai qu'ici je n'en fait que deux, mais ça ne sera pas le cas partout ;)

Seulement, avec ça, le code compile mais ne lance jamais ma méthode saisirMatrice();
En fait, il ne fait même pas de deuxième passe et va directement à la fin du programme (ce qu'il n'est pas sensé faire).
Je cherche donc :
- Pourquoi ? (forcement, comme tout le monde ^^)
- S'il y a une autre solution pour concaténer la valeur d'une variable dans le nom d'une autre variable (c'est en fait tout ce que je veux)


Edit :
Voici quelques détails, lorsque je lance tout ça en mode debug :
- j'ai une fenêtre d'alerte, avec le contenu suivant :
Program received signal SIGSEGV, Segmentation fault.
(je déteste les erreurs de segmentation --' )
- La backtrace confirme que la première matrice a bien été créée

Je suis ouvert à toute proposition.
Merci d'avance

1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 nov. 2008 à 17:07
une macro agit avant la compilation. Avant l'exécution tu ne connait pas la valeur de i, donc ta macro écrit :
matrice_i, et non matrice_1. Tu as mal compris l'exemple du forum.
Ce que tu veux faire est impossible. Le mieux est d'utiliser un tableau.
matrice[0] à la place de matrice_0, au final ce n'est pas très différent.
0
Utilisateur anonyme
19 nov. 2008 à 20:50
Merci de votre réponse, ça confirme ce que je suspectais =)

Et il n'y a pas d'autre moyen pour utiliser la valeur d'une variable dans le nom d'une autre ?
Si non, je vais faire un tableau d'objets, soit ^^'

Par contre, je ne trouve pas d'où vient l'erreur de segmentation (sachant que je suis revenu à un code "standard").
Mais bon, je crois que je vais (encore) tout effacer et recommencer : je ne suis pas pressé, je préfère que ce code soit bien fait sinon ça va m'ennuyer ;)
0
Utilisateur anonyme
19 nov. 2008 à 20:53
C'est vrai qu'en plus c'était écrit à la fin du post. Mais bon, j'ai voulu tenter ^^
0