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

+ Répondre à la discussion
C++ Discussion :

Je ne comprends pas cette ligne de code


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Je ne comprends pas cette ligne de code
    Bonjour tout le monde,

    Je ne comprends pas cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_Mots.Ajouter(CMot(Mot,ReferenceFF));
    elle fait partie de cette méthode :

    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
    bool CTraitementFF::TraiterLigne_FauxFreres(const CChargeurFichierTexte& Chargeur)
    {
    	if (Chargeur.NombreChamps() != 7) return true;
    	long		Code = atol(Chargeur.Champs(0));
    	const char*	Mot = Chargeur.Champs(1);
    	char		CodeNature = toupper(Chargeur.Champs(2)[0]);
    	bool		Feminin = (toupper(Chargeur.Champs(3)[0]) == 'O');
    	bool		Pluriel = (toupper(Chargeur.Champs(4)[0]) == 'O');
    	const char*	Nature = Chargeur.Champs(5);
    	const char*	Definition = Chargeur.Champs(6);
    	if (!m_FF.Ajouter(CFauxFrere(Mot,Code,Nature,Definition))) return true;
    	/*Donc là j'ai défini le faux-frère, maintenant je vais en prendre la référence, s'est une 
    	référence de faux-frère, je sais qu'il existe parce que "Ajouter" m'a renvoyé VRAI, donc je 
    	vais rechercher un élément en fonction de l'indice que j'aurai trouvé via une recherche sur le 
    	mot donc j'appelle Indice qui me renvoie l'indice par rapport au mot et avec cet indice 
    	j'accède à un élément et je note cette référence dans cette variable locale que j'appelle 
    	ReferenceFF */
    	CFauxFrere&	ReferenceFF = m_FF.Element(m_FF.Indice(Mot));//<-- un utilise la variable Mot créé ci-dessus
    	m_Mots.Ajouter(CMot(Mot,ReferenceFF));
     
    	return true;
    }
    et elle appelle celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool CTabMots::Ajouter(CMot& Modele)
    {
    	return CTableauGenerique::Ajouter(Modele);
    }
    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
    bool CTableauGenerique::Ajouter(const CGenerique& ModeleAAjouter, bool RetourEnCasDeDoublon)
    {
    	if (!ModeleAAjouter.EstValide()) return false;
    	if ( (m_Poubelle->GereUnicite()) && (Indice(ModeleAAjouter) >= 0) ) return RetourEnCasDeDoublon;
    	void* Nouveau = realloc(m_Tableau,(m_Nombre+1)*sizeof(CGenerique*));
    	if (Nouveau == NULL) return false;
    	m_Tableau = (CGenerique**)Nouveau;
    	CGenerique* AAjouter = ModeleAAjouter.Cloner();
    	if (!AAjouter->EstValide())
    	{
    		delete AAjouter;
    		return false;
    	}
    	m_Tableau[m_Nombre] = AAjouter;
    	m_Tableau[m_Nombre]->DefinirConteneur(this);
    	m_Nombre++;
    	return true;
    }
    Ce que je ne comprends pas, s'est pourquoi on a besoin de la référence d'un autre mot pour ajouter mon mot ?

    Merci d'avance pour votre aide et bon lundi de Pentecôte.

    beegees

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Sans meme lire le code ():

    Visiblement, ton objet m_mots dispose d'une méthode Ajouter, qui prend comme paramètre un objet de type CMot.

    Visiblement, le constructeur de CMot nécessite deux arguments (qui sont fournis à la fonction dans laquelle tu trouve la ligne de code indiquée sous les doux noms de Mot et de ReferenceFF).

    Ce code aura donc pour résultat:
    • de demander la création d'un objet temporaire de type CMot, en lui fournissant les valeur "qui vont bien" pour ce faire
    • de demander à m_mots d'ajouter cet objet temporaire à une liste existante


    Un petit truc en passant:

    Si le code se lit "de gauche à droite", il s'analyse le plus souvent "de droite à gauche"... ou en partant de la paire de parenthèse "la plus imbriquée"

    Edit: J'en oubliais presque de répondre à ta question:

    Comme, apparemment, il n'existe pas d'objet de type CMot, il faut bel et bien en demander la création au plus tard lorsque tu demande de l'insérer

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut Koala,

    Merci pour ta réponse.

    Ce qui m'inquiète, s'est l'objet Reference, à quoi sert cette référence ?

    Encore un grand merci à toi et bon Lundi de Pentecôte.

    beegees

  4. #4
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    Je ne suis pas sûr de bien comprendre ta question...

    Citation Envoyé par koala01
    Visiblement, le constructeur de CMot nécessite deux arguments (qui sont fournis à la fonction dans laquelle tu trouve la ligne de code indiquée sous les doux noms de Mot et de ReferenceFF).
    Maintenant, pourquoi le constructeur de CMot a besoin de cet objet, nous ne pouvons pas te répondre sans voir le code de ce constucteur.

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par r0d Voir le message
    Je ne suis pas sûr de bien comprendre ta question...



    Maintenant, pourquoi le constructeur de CMot a besoin de cet objet, nous ne pouvons pas te répondre sans voir le code de ce constucteur.
    Bonjour,

    Voici le code du constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CMot::CMot(const char* UnMot, CFauxFrere& UnFF)
    :m_ReferenceFF(UnFF)
    {
    	Mot(UnMot);
    }
    Merci

    beegees

  6. #6
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    Désolé, je ne comprend pas quel est ton problème.

  7. #7
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Commence par changer le constructeur en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CMot::CMot(const char* UnMot, CFauxFrere& UnFF)
    :m_ReferenceFF(UnFF), Mot(UnMot)
    {
     
    }
    en vérifiant que l'attribut "Mot" existe dans la classe CMot.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Points : 219
    Points
    219
    Par défaut
    Salut,

    Est ce que ton code compile ? Moi je dirais que non parce que si j'ai bien compris, cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_Mots.Ajouter(CMot(Mot,ReferenceFF));
    fait appel à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool CTabMots::Ajouter(CMot& Modele)
    {
    	return CTableauGenerique::Ajouter(Modele);
    }
    Or normalement tu ne peux pas lier une référence non-constante à une rvalue (dans ton cas un temporaire). Je serais donc surpris que ton code compile.

  9. #9
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Montag Voir le message
    Salut,

    Est ce que ton code compile ? Moi je dirais que non parce que si j'ai bien compris, cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_Mots.Ajouter(CMot(Mot,ReferenceFF));
    fait appel à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    bool CTabMots::Ajouter(CMot& Modele)
    {
    	return CTableauGenerique::Ajouter(Modele);
    }
    Or normalement tu ne peux pas lier une référence non-constante à une rvalue (dans ton cas un temporaire). Je serais donc surpris que ton code compile.
    Salut,

    Mon code compile et s'exécute super bien.

    Je voulais juste savoir pourquoi on passait une référence en plus, à part ça, s'est un programme fait par le prof qui fonctionne bien.

    Bien à toi.

    beegees

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Points : 219
    Points
    219
    Par défaut
    Citation Envoyé par beegees Voir le message
    Salut,

    Mon code compile et s'exécute super bien.

    Je voulais juste savoir pourquoi on passait une référence en plus, à part ça, s'est un programme fait par le prof qui fonctionne bien.

    Bien à toi.

    beegees
    Hum... ça m'étonne. Pourrais-tu, si possible, fournir le code complet de ton programme.

  11. #11
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Montag Voir le message
    Hum... ça m'étonne. Pourrais-tu, si possible, fournir le code complet de ton programme.
    bien sûr,le voici

    beegees

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Points : 219
    Points
    219
    Par défaut
    Il manque des fichiers (BasicConsole.h en particulier) je ne peux donc pas compiler

  13. #13
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Montag Voir le message
    Il manque des fichiers (BasicConsole.h en particulier) je ne peux donc pas compiler
    Voici les fichiers demandés.

    Sache qu'il y'avait moyen de faire sans car Coyotte l'a déjà fait.

    Beegees

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Points : 219
    Points
    219
    Par défaut
    Ouais, ça ne compile pas y a plein de messages d'erreurs et j'ai pas trop le temps de regarder pourquoi. Je reste persuadé que ton code ne devrait pas compiler. Essaie, si tu peux de le compiler avec une version plus récente de Visual.

  15. #15
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Pour compiler:

    remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <BasicConsole.h>
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    Un moment, il y a un
    Il faut rajouter le mot-clé class après le friend.

    S'il y a encore le void main(), mettre un int main().

    Enfin, au début de generique.h, mettre cette ligne:

    Et normalement ça devrait compiler sous gcc

  16. #16
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci bien coyotte.

    Une très bonne journée à toi.

    beegees

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    Enfin, au début de generique.h, mettre cette ligne:

    Enfin, c'est très sale quand même, hein...

  18. #18
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Enfin, c'est très sale quand même, hein...
    Merci pour cet important message medinoc.

    bonne journée.

    beegees

+ Répondre à la discussion
ActualitésFAQ C++Tutoriels C++Livres C++Outils & compilateurs C++Sources C++Qt

Discussions similaires

  1. [PHPExcel] Comprend pas cette écriture ?
    Par a028762 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/07/2009, 15h07
  2. Que fait cette ligne de code ?
    Par ANOVA dans le forum MATLAB
    Réponses: 9
    Dernier message: 17/07/2008, 09h20
  3. [W3C] Quelle est l'utilité réelle de cette ligne de code ?
    Par unreal2me dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/12/2006, 15h59
  4. Comprend pas cette commande SED
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/10/2006, 13h58
  5. [Boolean]Je ne comprend pas cette instruction
    Par jcachico dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/01/2006, 16h25

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