IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Déclaration d'un tableau d'objets


Sujet :

Langage C++

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Déclaration d'un tableau d'objets
    Bonjour à toutes et à tous,

    Je voudrais déclarer un tableau d'un objet (Bouton) qui est dérivé d'un autre (CompBase). Je n'arrive pas à trouver la syntaxe à employer.

    Voici les objets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    class CompBase {
    protected:
    public:
      int x, y, dX, dY;
      CompBase() { // constructeur
        ...
      }
      ...
    };
     
    class Bouton : public CompBase{
    public:
      Bouton(); // Constructeur par défaut
      Bouton(int, int, int, int, ...);
      ...
    };
     
    Bouton::Bouton(int a, int b, int c, int d, ...) {
      x = a; 
      y = b; 
      dX = c; 
      dY = d;
      ...
    }
    Merci de votre aide.

    Pierre

  2. #2
    Membre éclairé

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Points : 877
    Points
    877
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <iostream>
    using namespace std;
     
    class CompBase
    {
    public:
      int x, y, dX, dY;
      CompBase() {}
    };
     
    class Bouton : public CompBase
    {
    public:
      Bouton(int, int, int, int);
    };
     
    Bouton::Bouton(int a, int b, int c, int d)
    {
      x = a;
      y = b;
      dX = c;
      dY = d;
    }
     
    int main()
    {
        CompBase* c = new Bouton(5, 6, 7, 8);
        cout << c->x;
        cout << c->y;
        cout << c->dX;
        cout << c->dY;
        delete c;
        return 0;
    }
    Ceci compile, quel est le problème ?

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci PilloBuenaGente pour cette réponse.

    Ce que vous me proposez est la déclaration d'un pointeur sur un Bouton. Ce que je souhaite déclarer, est un tableau de boutons.

    Par ailleurs, j'avais vu cette déclaration, qui fonctionne, mais je voulais écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CompBase* c = new Bouton(); // sans paramètre
    Je pensais que c'était possible car j'ai déclaré un constructeur par défaut. Or dans ce cas, j'obtiens l'erreur de compilation suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    undefined reference to `Bouton::Bouton()'
    Merci de votre aide.

    Pierre

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    undefined referenced to [...] veut dire que la définition de la fonction (ici di constructeur) manque. Tu l'as déclaré, mais pas défini...d'où cette erreur de link.
    Par ailleurs, le fait que Bouton dérive de BaseComp n'a pas d'importance pour déclarer un tableau de Bouton. Cela aurait une incidence si tu déclarais un tableau de BaseComp pouvant contenir des objets de type Bouton.

    Pour déclarer ton tableau,
    si la taille est fixe et connue à la compilation. Si ce n'est pas le cas (boutons générés par une logique runtime):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <vector>
     
    std::vector<Bouton> btnTable;
    // et pour chaque bouton créé:
    btnTable.push_back)(Bouton(1,2,50,6));
    NB: pour faire comme ça tes boutons doivent être copiables (sémantique de valeur).
    Si toutefois tes boutons sont des entités, il faut alors utiliser un tableau / vecteur de pointeurs, en n'oubliant pas de gérer la durée de vie des boutons, qui ne sera plus automatiquement gérée par le tableau ou vector.

  5. #5
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Merci therwald pour ces précisions.
    Citation Envoyé par therwald Voir le message
    undefined referenced to [...] veut dire que la définition de la fonction (ici di constructeur) manque. Tu l'as déclaré, mais pas défini...d'où cette erreur de link. ...
    Cela consiste en quoi de le définir ?

    Citation Envoyé par therwald Voir le message

    Pour déclarer ton tableau,
    si la taille est fixe et connue à la compilation.
    Oui, la taille est connue d'avance

    Si j'écris ce code (ça compile), mais qu'après, je définisse les paramètres de chaque bouton comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      for(int i = 0 ; i < 5 ; i++)
        btnJours[i] = Bouton(118+27*i, 63, 24, 24);
    je retombe sur l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    undefined reference to `Bouton::Bouton()'
    Merci de votre aide.

    Pierre

  6. #6
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Merci therwald pour ces précisions.

    Cela consiste en quoi de le définir ?
    Cela consiste à dire quel est le code qui doit être exécuté lorsqu’on appelle le constructeur par défaut.

    Donc, de la même manière que pour ton constructeur à 4 arguments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Button::Button() :
    // initializer list
     x(0), y(0) ...
    {
       ....
    }

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Cela consiste en quoi de le définir ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Bouton::Bouton()
    {
    //TODO, ici code du constructeur
    }
    Tu as fait ça pour le constructeur Bouton::Bouton(int a,int b, int c, int d), mais pas pour le constructeur par défaut.

    Citation Envoyé par ChPr Voir le message
    je retombe sur l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    undefined reference to `Bouton::Bouton()'
    Le constructeur par défaut est utilisé pour créer les éléments du tableau avant que tu ne les affectes. Donc il faut le définir.

  8. #8
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    C'est effectivement tout bête, ... mais je n'y avais pas pensé.

    Merci à vous.

    Pierre

  9. #9
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par therwald Voir le message
    Pour déclarer ton tableau,
    si la taille est fixe et connue à la compilation.
    Dans ce cas, il est préférable d'utiliser std::array, qui a l'avantage d'être plus simple et de s'utiliser comme std::vector.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déclaration de tableau d'objets
    Par tim1789 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/07/2010, 14h48
  2. Sauvegarde / Chargement d'un tableau d'objets
    Par Naruto dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 14h34
  3. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  4. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo