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 :

Retourner pointeur sur structure en C++


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut Retourner pointeur sur structure en C++
    Bonjour à vous tous!
    J'ai une question simple et rapide:
    J'ai une classe, dans laquelle je déclare des structures.
    Est il possible qu'une de mes méthodes retourne un pointeur sur une de ces structures?
    Si c'est le cas, je ne vois pas comment car je me confronte constamment à l'erreur suivante:
    error C2143: syntax error : missing ';' before '*'

    Merci d'avance de votre éclairage

  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
    12
    13
    class Toto
    {
    public:
    	struct MyStruct { int foo; int bar; };
    	MyStruct _myStruct;
    	MyStruct* getMyStruct() { return &_myStruct; }
    };
     
    int main()
    {
    	Toto toto;
    	Toto::MyStruct* myStruct = toto.getMyStruct();
    }
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  3. #3
    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
    Je dirais plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Toto
    {
    public:
    	struct MyStruct { int foo; int bar; };
    	struct MyStruct _myStruct;
    	struct MyStruct* getMyStruct() { return &_myStruct; }
    };
     
    int main()
    {
    	Toto toto;
    	struct Toto::MyStruct* myStruct = toto.getMyStruct();
    }
    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
    .

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Et bien disons que ma méthode qui retournerai un pointeur est presque impossible à coder "inline"
    Donc elle est codée dans le .cpp sous la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    T_Struct * MaClasse::GetPtrStruct ()
    {
        return &nimpotreQuelleStruct;
    }
    J'ai simplifié la méthode, mais même ça, ça ne fonctionne pas et je ne vois pas pourquoi

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Bon... Alors là, il y a un détail qui m'échappe
    Quand je déclare ma méthode "inline", ça passe

    Comment cela se fait que je puisse passer des paramètres du type de ma structure dans mes méthodes, mais pas retourner ce même type

    Il y a un truc que j'ignore dans l'utilisation des structures en c++?

  6. #6
    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
    Question à ram_0000, pourquoi rajouter struct en C++ ?
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  7. #7
    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
    Citation Envoyé par themadmax Voir le message
    Question à ram_0000, pourquoi rajouter struct en C++ ?
    Une erreur de ma part, je ne savais pas qu'il était possible de ne pas mettre le mot clé struct. Je viens de tester et je suis le premier surpris.

    C'est une habitude du C je suppose car, là, c'est obligatoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // en C
     
    struct MyStruct { int foo; int bar; };
    MyStruct _myStruct;  // erreur de compilation, type MyStruct inconnu
    struct MyStruct _myStruct;  // OK à la compilation
    Mes excuses, j'aurai dû tester avant d'être sûr
    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
    .

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaClasse::T_Struct * MaClasse::GetPtrStruct ()
    {
        return &nimpotreQuelleStruct;
    }
    MAT.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Ca marche

    Quelqu'un peut m'expliquer pourquoi ma structure est déclaré comme une donnée membre static de ma classe?
    Je ne comprends pas le comportement.

    Quelqu'un peu il éclairer ma lanterne?

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    La structure est déclarée en tant que type interne à la classe.
    Lorsque tu écris le type de retour pour la fonction inline tu es dans l'espace de nommage de la classe donc tu peux manipuler le type directement, par contre dans un .cpp ce n'est plus le cas et il faut du coup indiquer le type complet.

    MAT.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Mais alors pourquoi est ce que le problème ne se pose pas quand ce type est passé en paramètre?
    Quand je passe MyStruct * param, il ne me pose aucun probleme de compilation.
    Je suis un peu perdu sur le comportement là.

    Je vois très bien ce que tu veux dire, et je pense avoir pigé, mais dans ce as, pourquoi le problème ne se pose pas pour le passe de paramètres?

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Une erreur de ma part, je ne savais pas qu'il était possible de ne pas mettre le mot clé struct. Je viens de tester et je suis le premier surpris.

    C'est une habitude du C je suppose car, là, c'est obligatoire.
    Au passage, c'est une bonne occasion de faire un petit rappel sur une légende urbaine qui aurait dû être cassée il y a longtemps. Le mot clé struct n'a pas du tout le même effet en C++, en fait son fonctionnement est exactement similaire à celui du mot clé class à deux exceptions près:
    - ses membres sont par défaut en public et non pas en private
    - si la structure hérite de quelque chose sans spécifier le type d'héritage, ce sera par défaut du public et non du private

Discussions similaires

  1. pointeur sur structures
    Par Seimaya dans le forum Débuter
    Réponses: 33
    Dernier message: 26/08/2007, 18h13
  2. Réponses: 6
    Dernier message: 07/07/2007, 18h12
  3. pointeur sur structure
    Par julien.63 dans le forum C
    Réponses: 7
    Dernier message: 04/06/2007, 17h50
  4. problème pointeur sur structure
    Par lejohn dans le forum C
    Réponses: 9
    Dernier message: 01/05/2007, 13h17
  5. Réponses: 2
    Dernier message: 21/03/2007, 10h55

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