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 :

passage de pointeur dans une classe


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Points : 37
    Points
    37
    Par défaut passage de pointeur dans une classe
    bonjour

    je dois utiliser cette fonction en classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UINT CClasse::GetInfo(long *var1, long *var2)
    {
         *var1 = 2:
         *var2 = 4:
    }
    le pb est ici - ca plante complètement le programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void fonctionGetInfo()
    {
        long *var1;
        long *var2;
     
        CClasse =  new Classe();
     
        CClasse->GetInfo(var1, var2);
    // normalement je pense qu'il faudrait faire ca mais le compilateur m'insulte
    // AOpenAsio->GetInfo(&var1, &var2);
    }
    merci

  2. #2
    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
    Normal,

    var1 et var2 sont bien des pointeurs sur long mais il ne pointent sur rien, leur valeur est "non initialisée" et donc ils pointent n'importe où en mémoire d'où ton problème.

    essaye ceci (d'ailleurs, tu l'avais déjà fait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void fonctionGetInfo()
    {
        long var1;
        long var2;
     
        CClasse =  new Classe;
     
        CClasse->GetInfo(&var1, &var2);
    }
    Il faut peut être aussi initialiser les 2 variables var1 et var2 mais cela, je ne sais te le dire, je ne connais pas les pré requis de la fonction CClasse->GetInfo().

    Et d'aiulleur, vu comment tu l'appelles, il faut que GetInfo() soit une fonction statique de la classe CClasse, c'est le cas ?

    Si le compilateur t'insulte, donne nous le message d'insulte afin que l'on puisse t'aider.
    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
    .

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        CClasse =  new Classe;
     
        CClasse->GetInfo(&var1, &var2);
    Ne serait-ce pas ces 2 lignes qui sont fautives?
    Il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        CClasse  *Classe =  new CClasse(); // plus clair avec des perenthèses
     
        Classe->GetInfo(&var1, &var2);
    La classe s'appelle CClasse, et on crée et initialise une variable (un objet) de nom Classe et de type CClasse.

  4. #4
    Nouveau membre du Club
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Points : 37
    Points
    37
    Par défaut
    merci de vos réponses

    effectivement j'avais tapé un peu vite et oublié les parrenthèses
    j'ai corrigé dans le premier post

    CClasse = new Classe();

    si je fais ca

    CClasse->GetInfo(&var1, &var2);

    j'ai le message d'erreur suivant

    no matching function for call to `Classe::GetInfo(long int**, long int**)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Non, c'est pas ça.
    1- vous déclarez une classe que vous appelez CClasse
    2- Cette classe possède une fonction GetInfo() la première ligne de sa déclaration sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UINT CClasse::GetInfo(...)
    3- vous voulez créer un objet du type CClasse. Supposons qu'on l'appelle C. En effet, cet objet est créé et utilisé dans dans une fonction, il aura donc une durée de vie très limitée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void Fonction(void)
    {
      CClasse *C=new CClasse();
    ... utilisation de C ...
    // maintenant il faut détruire l'objet
      delete C;
    }

  6. #6
    Nouveau membre du Club
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Points : 37
    Points
    37
    Par défaut
    pour le delete je l'avais zapper pour limiter le code et se concentrer sur le pb

    en suivant tes indications Pierre le pb est toujours le même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void Fonction(void)
    {
      CClasse *C=new CClasse();
     
      C->GetInfo(&var1, &var2);
     
      delete C;
    }

  7. #7
    Invité
    Invité(e)
    Par défaut
    &var1 et &var2 sont des adresses.
    Ce sont les adresses des variables var1 et var2.
    Or ces variables n'ont pas été déclarées, donc n'existent pas. Il est normal que compilateur ne soit pas content.
    Voir les indications de ram_0000, 2 ou 3 post précédents.

  8. #8
    Nouveau membre du Club
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Points : 37
    Points
    37
    Par défaut
    pour faire plus simple on va retourner le pb autrement

    comment avec fonctionGetInfo() je peux récupérer les valeurs de la fonction de la classe CClasse::GetInfo
    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
     
    void fonctionGetInfo()
    {
        Classe *CClasse =  new Classe();
        // ou CClasse =  new Classe();
     
    }
     
    UINT CClasse::GetInfo(long *var1, long *var2)
    {
         *var1 = 2:
         *var2 = 4:
     
         return 0;
    }

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2003
    Messages : 43
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par ccinfonews Voir le message
    pour faire plus simple on va retourner le pb autrement

    comment avec fonctionGetInfo() je peux récupérer les valeurs de la fonction de la classe CClasse::GetInfo
    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
     
    void fonctionGetInfo()
    {
        Classe *CClasse =  new Classe();
        // ou CClasse =  new Classe();
     
    }
     
    UINT CClasse::GetInfo(long *var1, long *var2)
    {
         *var1 = 2:
         *var2 = 4:
     
         return 0;
    }
    La réponse a été donné par ram-0000 au deuxième post ... (http://www.developpez.net/forums/d99...e/#post5589948)

    Il faut déclarer var1 et var2 en long, et non pas en long* si tu veux pouvoir écrire quelque chose dedans :

    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
     
    void fonctionGetInfo()
    {
        long var1, var2;
        Classe *CClasse =  new Classe();
        // ou CClasse =  new Classe();
        CClasse->GetInfo(&var1, &var2);
     
        delete CClasse;
     
    }
     
    UINT CClasse::GetInfo(long *var1, long *var2)
    {
         *var1 = 2:
         *var2 = 4:
     
         return 0;
    }

Discussions similaires

  1. Problème de variable membre en pointeur dans une classe
    Par medrimonia dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2012, 18h00
  2. Réponses: 2
    Dernier message: 08/09/2011, 09h07
  3. passage de variables dans une Class
    Par tavarlindar dans le forum Langage
    Réponses: 5
    Dernier message: 26/05/2011, 14h50
  4. passage de pointeur dans une fonction
    Par El Manco dans le forum Débuter
    Réponses: 10
    Dernier message: 09/02/2009, 22h13
  5. Réponses: 6
    Dernier message: 31/05/2008, 15h45

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