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

C++ Discussion :

question sur les pointeurs


Sujet :

C++

  1. #21
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Je reviens vers vous, car j'ai toujours une petite chose qui m'inquiète, quand aux pointeurs...

    Un objet en C++ ne change pas d'adresse.
    Pourtant, lorsque je passe un même pointeur d'un endroit à un autre, il se passe des choses étranges, a savoir il fait planter, selon l'ordre dans lequel je le passe...Un peu de code pour tenter d'être plus clair:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void NiveauTest::recoitAfficheur(Afficheur *afficheur)
    {
        m_afficheur = afficheur;
        m_decor1.recoitAfficheur(afficheur);
    }
    Un exemple très simple:

    m_afficheur, n'est autre qu'un pointeur "Afficheur *m_afficheur" situé dans les attributs private de l'objet NiveauTest.
    Quand, donc, j'envoi ce pointeur a mon objet m_decor1 ainsi, (il sera également transmis par la suite à d'autres objets), cela fonctionne parfaitement.

    En revanche, si je fais, par exemple ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void NiveauTest::recoitAfficheur(Afficheur *afficheur)
    {
        m_afficheur = afficheur;
        m_decor1.recoitAfficheur(m_afficheur);
    }
    ...Il plante.
    Pourquoi, selon vous? L'objet afficheur n'a pourtant pas changé d'adresse, il est le même, et m_afficheur, n'est qu'un pointeur, donc une variable sensée mémoriser une adresse.
    Le plus étonnant, c'est que dans d'autres objets, qui sont construits sur le même modèle (sauf erreur), ça marche sans planter.

    Voilà. Bien sur, je peux bidouiller pour que ça fonctionne, mais cela suscite tout de même des inquiétudes quand à la fiabilité de mon programme.

    Merci si pouvez m'aider.

  2. #22
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    J'ajoute même que, cela semble fonctionner ou pas de facon aléatoire, sans pour autant aucun changements.
    Par contre, si je renvoi la même adresse , une 2ème fois, ca remarche.

    ex ici:

    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
     
     
        Afficheur afficheur;
        afficheur.recoitFenetre(&fenetre);
        Jeu jeu;
        jeu.recoitAfficheur(&afficheur);//ca marche de temps en temps, et plante de temps en temps, si je ne le répète pas plus bas
     
     
    while(boucleDeJeu)
    {
    ...
     
        jeu.recoitAfficheur(&afficheur); //ici update "forcé", normalement non nécessaire, pour voir...et ca marche
        jeu.jouer();
    ...
    }

    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
    36
    37
    38
    39
     
    void Jeu::recoitAfficheur(Afficheur *afficheur)
    {
        m_afficheur = afficheur;
    }
     
    void Jeu::jouer()
    {
     
        switch(m_niveau)
        {
        case 0:
            this->joueMenu();
            break;
        case 1:
            this->joueNiveau();
            break;
        }
     
    }
     
    void Jeu::joueMenu()
    {
        if(m_chargeMenu)
        {
        m_menu = new Menu;
        m_menu->recoitAfficheur(m_afficheur);
        m_chargeMenu = false;
        }
     
        m_menu->jouer();
     
        if(m_menu->choisiNiveau())
        {
        delete m_menu;
        m_chargeMenu = true;
        m_niveau = 1;
        }
    }

  3. #23
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Là, tu partages des pointeurs. Avant de te/nous faire des nœuds dans la tête, commence par utiliser des pointeurs intelligents.

  4. #24
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Pourquoi, le partage de pointeur n'est pas correct?

  5. #25
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Je n'en sais rien, et je n'ai pas envie de regarder.
    Ton problème ressemble au déréférencement d'un pointeur invalide. Il manque du code pour que l'on comprenne ce qu'il se passe.
    Les pointeurs intelligents permettent justement d'éviter ça.

    Mais ça ne dispense pas de comprendre ce qu'il se passe.
    Manifestement, ton pointeur est libéré quelque part.

    Quand tu supprimes ton menu, tu ne libérerais pas ton pointeur, par hasard ?

  6. #26
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Donne un exemple complet (i.e. qu'on puisse copier/coller) qui reproduit exactement le problème. Tu détruis probablement l'objet pointé d'où des comportements indéterminés qui donne l'impression d'avoir de l'aléatoire.

  7. #27
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Ok, merci pour toutes ces réponses.

    Les pointeurs intelligents permettent justement d'éviter ça.
    En effet. Je me suis donc résolu a utiliser les pointeurs intelligents. Passer a côté, vu mon niveau de programmation, est probablement idio
    Donc voila, c'est fait, j'utilise donc des pointeurs intelligents, a savoir pour l'instant le boost::shared_prt<MonObjet>.

    Merci donc, pour ces conseils

    J'ai encore besoin de quelques trucs, si vous pouvez m'aider, svp !

    Mon interrogation est la suivante : peut-on utiliser un constructeur de copie pour envoyer a un pointeur(intelligent) une donnée du nouvel objet construit ?

    voici mon exemple, un éditeur de niveaux:

    j'aimerais que le constructeur de copie de cet objet "DecorModulaire" envoie, une fois tous les attributs copiés, l'adresse de son EI (EntiteImage, et non Etat islamique, attention, pas de propagande ici ) , a mon ptr intelligent Afficheur, qui l'affichera.

    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
     
     
    DecorModulaire::DecorModulaire(DecorModulaire const& decorModulaireCopie)
    {
     
        m_ptr_afficheur                 = decorModulaireCopie.m_ptr_afficheur;
        m_EI                                = decorModulaireCopie.m_EI ;
        etc...
     
     
        m_ptr_afficheur->recoitEI(&m_EI); // bien sur, ca ne marche pas et fait planter. //message d'erreur en console : "pure virtual call  -- terminate called without exception" 
     
       decorModulaireCopie.m_ptr_afficheur->recoitEI(&m_EI); //egalement.
     
    }
    Afin de ne pas avoir a rajouter une fonction de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    void DecorModulaire::initialise()
    {
        m_ptr_afficheur->recoitEI(&m_EI);
    }
    et ainsi, faire dirrectement, par exemple, depuis un objet "EditeurDeDecorQuelconque


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    void DecorQuelconque::placeDecor(string nom, float x, float y)
    {
        for(vector<EditeurDeDecorQuel>::iterator it = m_decorModulaireBase.begin(); it != m_decorModulaireBase.end(); it ++)
        {
           if (it->renvoiNom()== nom)
            {
            it->recoitCoordonnes(x, y, m_zMin);
            m_decorModulaireChaine.recoitDecorModulaire(*it); // je copie ici le décor demandé a l'endroit demandé, dans une chaine, qui va les stocker...
                                                                                        // mais il faut également que mon Afficheur recoive l'adresse de son EI.
            }
        }
    }
    Faisant en sorte que mon Objet Afficheur ai bien reçu l'image du nouvel objet construit, appelé depuis, par ex, mon éditeur de niveau.
    C'est peut être de l'enculage de mouches, mais je me dit que plus on élague de code, mieux c'est.

    Merci si vous pouvez m'aider

  8. #28
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 058
    Points : 12 093
    Points
    12 093
    Par défaut
    déclaration de "m_ptr_afficheur", SVP ?

  9. #29
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    je le déclare ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
        boost::shared_ptr<Afficheur>  ptr_Afficheur(new Afficheur);
        ...
     
        jeu.recoitPtrAfficheur(ptr_Afficheur);
        ...etc...

  10. #30
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Si jamais recoitPtrAfficheur prend un pointeur nu et que la durée de vie de ptr_afficheur peut expirer avant que jeu n'aie plus besoin de son pointeur, alors ton code est hilaramment mauvais et tu n'as vraiment pas compris comment shared_ptr marche.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #31
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    OK.

    Pourtant, mon programme se lance tout a fait bien et marche, je dirais...très correctement...En tout cas sans le moindre bug, du moins dans ma version actuelle...
    Je vais clarifier mon code. J'envoie mon pointeur sitôt crée, et ce pointeur est appelé a chaque boucle, puisque son rôle est d'afficher les images.
    (Quitte à déclencher une hilarité générale, je vous envoie tout le code de mon main... )

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
     
    int main()
    {
     
        std::vector<sf::VideoMode> resolutionDisponibles;
        resolutionDisponibles = sf::VideoMode::getFullscreenModes();
        std::vector<sf::VideoMode>::iterator itVideo = resolutionDisponibles.begin();
        int resolutionX = itVideo->width;
        int resolutionY = itVideo->height;
     
        sf::RenderWindow fenetre(sf::VideoMode(resolutionX, resolutionY), "Element", sf::Style::Fullscreen);
     
     
     
     
        boost::shared_ptr<Afficheur>  ptr_Afficheur(new Afficheur);
        boost::shared_ptr<sf::Event>  ptr_event(new sf::Event);
     
        ptr_Afficheur->recoitFenetre(&fenetre);
        ptr_Afficheur->recoitPtrEvent(ptr_event);
     
        Jeu jeu;
        jeu.recoitPtrAfficheur(ptr_Afficheur);
     
        sf::Clock clock;
        sf::Time ecoule;
        while (fenetre.isOpen())
        {
     
            while (fenetre.pollEvent(*ptr_event))
            {
                if (ptr_event->type == sf::Event::Closed || sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                {
                    fenetre.close();
                }
            }
     
        ecoule = clock.getElapsedTime();
        if(ecoule.asMicroseconds() >= 31250)
        {
            clock.restart();
            ptr_Afficheur->recoitTemps();
        }
     
        jeu.jouer();
     
     
        fenetre.clear();
        ptr_Afficheur->affiche();
        fenetre.display();
     
        }
     
        return 0;
    }

  12. #32
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Au niveau durée de vie de ptr_Afficheur, ça m'a l'air plus ou moins acceptable.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #33
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Merci, Medinoc, pour votre réponse.

    Au niveau durée de vie de ptr_Afficheur, ça m'a l'air plus ou moins acceptable.
    plutôt "plus", ou plutôt "moin"...Car là j'ai des raisons de m'inquietter...


    Sinon, personne n'a répondu a ma question, qui peut être n'était pas assez clair:

    est-il possible d'envoyer, lors d'une copie d'objet, une variable (en fait, ici un objet EI ) a un pointeur/intelligent, a la fin de la copie de celui ci, via le constructeur de copie..?
    Si oui, SVP, comment peut on faire ?

  14. #34
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Une autre question, concernant les pointeurs intelligents...

    Peut on convertir objet en pointeur intelligent pour l'envoyer a quelque chose, par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
          objetTest1;
     
          boost::shared_ptr<Objet>  objetTest1_ptr;
     
          objetTest1_ptr = &objetTest1;
    (j'ai essayé, naturellement, mais ca ne marche pas. erreur: "no match for 'operator=' in etc..."

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Citation Envoyé par mazertys17 Voir le message
    Une autre question, concernant les pointeurs intelligents...

    Peut on convertir objet en pointeur intelligent pour l'envoyer a quelque chose, par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
          objetTest1;
     
          boost::shared_ptr<Objet>  objetTest1_ptr;
     
          objetTest1_ptr = &objetTest1;
    (j'ai essayé, naturellement, mais ca ne marche pas. erreur: "no match for 'operator=' in etc..."
    Surtout pas malheureux!!! Si tu veux transmettre un pointeur intelligent à une fonction, transmet le par référence, éventuellement constante... Encore une fois, si tu n'as aucune raison de croire que l'objet puisse ne pas exister -- et c'est le cas d'un pointeur intelligent, étant donné que c'est justement fait pour servir de capsule RAII à des objets qui, eux, ne peuvent pas exster -- tu dois abandonner l'idée de les transmettre par pointeur. Les références sont tes amies et tu devrais en user et en abuser

    J'irais presque jusqu'à dire : quitte à transmettre par référence (constante) une donnée qui aurait pu être transmise par valeur. Ce n'est pas forcément l'idéal en termes d'utilisation de la mémoire, mais c'est en tout cas beaucoup moins préjudiciable que d'essayer de transmettre des paramètres par pointeurs alors qu'il n'y a aucune raison de le faire
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  16. #36
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    transmet le par référence
    mais c'est le cas de ce qui suit, il me semble ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Objet monObjet;
     
    bidul.recoitObjet(&monObjet);//je transmet ici une référence !?
    ce qui donnerait pour bidul:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    void bidul::recoitObjet(Objet *objetDontOnRecoitUneReference)
    {
          _refDeObjet = objetDontOnRecoitUneReference;
     
    }
    Cette methode vous parrait-elle scabreuse? même si on la fait en pointeur intelligent?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    void bidul::recoitObjet ( boost::shared_ptr<Objet> objetDontOnRecoitUneReference )
    {
          _refDeObjet = objetDontOnRecoitUneReference;
     
    }

  17. #37
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 058
    Points : 12 093
    Points
    12 093
    Par défaut
    Dans votre dernier post, aucun des paramètres n'est passé par référence, aucun.

    Les 2 premiers sont des passages par pointeur nus et le dernier est un passage par copie.

  18. #38
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut

    Faut que je revois mes cours !
    Je croyais que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Objet test = &objet;
    signifiait que test était une référence, et que, du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    bidul.recoitObjet(&objet);
    signifiait envoyer une référence....
    Alors j'étais dans l'erreur ?!

  19. #39
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 058
    Points : 12 093
    Points
    12 093
    Par défaut
    C'est l'utilisation du même symbole "&" à la fois pour indiquer l'adresse d'une variable (donc la valeur d'un pointeur sur l'objet) et pour spécifier un type référence lors de la déclaration d'un type qui est un peu casse-gueule en C++, mais on doit faire avec.

  20. #40
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut
    Haha...ok...je me suis fais avoir...donc ce que je code n'est pas safe...

    de toute facon, maintenant, je vais essayer de ne plus utitliser de pointeur nu, mais des pointeurs intelligents, et...potasser les références pour essayer de comprendre comment ca marche pour les utiliser..

    Merci, donc, pour ces précisions. J'ai encore du boulot devant moi ! :

Discussions similaires

  1. Question sur les pointeurs génériques
    Par mikedavem dans le forum C
    Réponses: 16
    Dernier message: 24/05/2006, 12h56
  2. question sur les pointeurs
    Par jd.baculard dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2006, 03h30
  3. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2006, 10h55
  4. Question sur les pointeurs.
    Par Chrisemi dans le forum C++
    Réponses: 5
    Dernier message: 29/10/2005, 00h47
  5. questions sur les pointeurs
    Par Hyoga dans le forum C++
    Réponses: 17
    Dernier message: 09/01/2005, 00h25

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