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 :

Objets imbriqués et leurs constructeurs


Sujet :

Langage C++

  1. #1
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut Objets imbriqués et leurs constructeurs
    Bonjour.
    j'ai une 1° classe qui décrit des coordonnées 2D sur un plateau. le constructeur unique prend en entrée la ligne et la colonne pour tester la validité des valeurs fournies.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Coord::Coord(int row, int col) {
    	if (not (row >= 0 and row < TAILLEGRILLE)
    			and (col >= 0 and col < TAILLEGRILLE)) {
    		this->lig = row;
    		this->col = col;
    	} else {
    		throw std::invalid_argument("cordonnées invalides");
    	}
    }
    j'ai une 2° classe qui décrit des pions sur ce plateau. un pion possède un identifiant, et une position décrite par un objet Coord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Pion {
    public:
    	Pion(int, Coord);
     
    private:
    	int identifiant;
    	Coord coord;
    };
    le problème arrive lorsque je veux créer le constructeur des pions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Pion::Pion(int identifiant, Coord coord) {
    	this->identifiant = identifiant;
    	this->coord = coord;
    }
    J'obtiens l'erreur : pas de fonction concordante pour l'appel à «*Coord::Coord()*» dans le constructeur Pion.

    Comme je n'ai pas, par contrainte d'exercice, de constructeur par défaut pour l'objet Coord, je ne trouve pas comment coder correctement le constructeur des pions.
    Merci pour vos indications/éclaircissements.
    Yves

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 145
    Billets dans le blog
    4
    Par défaut
    Il faut utiliser la liste d'initialisation.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Et oui.

    Ton code est équivalent à :
    - pour créer un Pion:
    --- commencer par créer ses composants:
    ------ identifiant de type int non initialisé;
    ------ coord de type Coord initialisé par défaut.
    --- puis exécuter le code constructeur:
    ------ identifiant reçoit la valeur du paramètre identifiant;
    ------ coord reçoit la copie du paramètre coord.

    Ce qui pose un problème est "coord de type Coord initialisé par défaut". Ça n'est pas possible car le constructeur de Coord nécessite 2 paramètres row et col. C'est l'erreur affichée.

    En utilisant la liste d'initialisation ça donnera:
    --- commencer par créer ses composants:
    ------ identifiant de type int initialisé à partir du paramètre identifiant
    ------ coord de type Coord initialisé à partir du paramètre coord.
    --- puis rien à exécuter dans le code constructeur:

    Plus aucun problème et il n'y a plus d'utilisation du mot this.

  4. #4
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Effectivement, ça fonctionne parfaitement avec la liste d'initialisation ! Merci.

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

Discussions similaires

  1. Hiérarchie des classes (et leurs constructeurs)
    Par Ryants dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/02/2009, 16h21
  2. Réponses: 6
    Dernier message: 10/06/2008, 16h55
  3. Créer des objets imbriqués
    Par Ludix dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 30/05/2008, 15h53
  4. Réponses: 6
    Dernier message: 10/06/2007, 13h33
  5. Réponses: 9
    Dernier message: 22/12/2005, 22h20

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