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 :

[Pointeurs] Instanciation dans une fonction


Sujet :

C++

  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut [Pointeurs] Instanciation dans une fonction
    Bonjour,

    je bloques sur un truc tout bête, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void f(Objet *obj) {
       obj= new Objet[1];
       obj= monObjet;
    }
     
    int main(void) {
       Objet *objets= NULL;
       f(objets);
       return 0;
    }
    Seulement, objets n'est pas modifié après l'appel à la fonction, comment modifier mon code pour y remédier?

    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  2. #2
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void f(Objet *obj) {
       obj= new Objet(param); //Ou
       obj= monObjet; //Si l'objet monObjet est deja instancé
    }
     
    int main(void) {
       Objet *objets= NULL;
       f(objets);
       return 0;
    }
    Je ne sais pas réelement si tu veut faire un simple instanciation dans ta fonction, ou alors utiliser des pointeurs de pointeur?
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par themadmax Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void f(Objet *obj) {
       obj= new Objet(param); //Ou
       obj= monObjet; //Si l'objet monObjet est deja instancé
    }
     
    int main(void) {
       Objet *objets= NULL;
       f(objets);
       return 0;
    }
    Je ne sais pas réelement si tu veut faire un simple instanciation dans ta fonction, ou alors utiliser des pointeurs de pointeur?
    , j'ai rien compris...

    En fait je cherche à remplir mon tableau d'objets. Seulement, je ne connais la taille que dans la fonction et non dans le main
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Alors je pense qu'il faut un pointeur de pointeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void f(Objet **obj)
    {
       *obj= new Objet[1];
    }
     
    int main(void)
    {
       Objet *objets= NULL;
       f(&objets);
       return 0;
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Bonjour,

    Quand f(Objet *obj) est appelé, une copie du pointeur passé en paramètre est effectué dans un pointeur temporaire. Donc quand tu faut obj = new Objet tu change la valeur du pointeur temporaire.
    Mais c'est pas super en C++...

    Tu voie j'essaie de pas faire de bêtisse
    ... j'ai faillie modifier ton message (editer au lieux de citer)

  6. #6
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Bonjour,

    Quand f(Objet *obj) est appelé, une copie du pointeur passé en paramètre est effectué dans un pointeur temporaire. Donc quand tu faut obj = new Objet tu change la valeur du pointeur temporaire.
    Mais c'est pas super en C++...
    Ce que tu me conseilles de faire en fin de compte, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void f(Objet * &obj) {
       obj= new Objet[1];
       obj= monObjet;
    }
     
    int main(void) {
       Objet *objets= NULL;
       f(&objets);
       return 0;
    }
    ?

    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  7. #7
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Tu voie j'essaie de pas faire de bêtisse
    ... j'ai faillie modifier ton message (editer au lieux de citer)

    Ah ben bravo, mais non ça va, t'as pas l'air de faire trop de bêtise vu que ce que tu m'as conseille de faire en passant la référence du pointeur fonctionne parfaitement . J'y aurai jamais pensé de moi-même



    P.S: Ta hache est plus grande que la mienne
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par buchs Voir le message
    J'y aurai jamais pensé de moi-même
    j'ai déjà perdu une aprés midi dessus. maintenant je sais

    Citation Envoyé par buchs Voir le message
    P.S: Ta hache est plus grande que la mienne

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

Discussions similaires

  1. Instanciation dans une fonction inline
    Par mister3957 dans le forum C++
    Réponses: 5
    Dernier message: 04/03/2007, 19h27
  2. Pointeur dans une fonction ?
    Par sliiim6184 dans le forum C
    Réponses: 4
    Dernier message: 28/12/2006, 11h32
  3. [Débutant] Pointeur FILE dans une fonction
    Par Dexter00 dans le forum C
    Réponses: 8
    Dernier message: 29/08/2006, 21h37
  4. passage pointeur NULL dans une fonction
    Par reptils dans le forum C
    Réponses: 4
    Dernier message: 11/05/2006, 23h12
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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