PB C++

David -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
J'ai un problème je débute en C++ et je voudrait faire une sorte de pile. Je déclare une structure mais a l'intérieur de cette structure je souhaite ajouter un champs qui pointe sur une structure du meme type que je suis en train de déclarer.

Merci de m'aider !!!

14 réponses

  1. JSS Messages postés 3743 Date d'inscription   Statut Contributeur 32
     
    salut,

    yes vas y envoie le code on t'aidera si on peut ...

    bon courage

    JSS
    0
    1. David
       
      struct cases{
      int x;
      int y;
      int f;
      int g;
      int h;
      // ici je souhaiterais ajouter un pointeur vers "pere" du type cases
      };
      0
      1. JSS Messages postés 3743 Date d'inscription   Statut Contributeur 32 > David
         
        D'apres mes lointains souvenirs ....

        essaie ca ...

        mais je suis pas tres tres sur ...

        typedef struct _cases{
        int x;
        int y;
        int f;
        int g;
        int h;
        struct _cases * pere;
        } cases;

        JSS
        0
  2. Guki
     
    Je ne pense pas que ce soit possible parce que pointer sur une structure qui n'est pas complètement définie engendera beaucoup de problèmes au compilo.
    0
    1. david
       
      Il y a forcemment un moyen sinon on ne pourrai pas faire de liste chainée !!! Ce qui me renderait la vie impossible ou bien je me suis mal exprimé et tu ne vois pas ce que je souhaite faire !!!
      0
    2. Guki > david
       
      La solution serait de déclarer 2 structures à mon avis.
      0
    3. LILOU > david
       
      JE PENSE AUSSI QU'IL FAUDRAI 2 STRUCTURES
      0
    4. Guki > david
       
      Du style

      typedef
      struct cases
      {
      int x;
      int y;
      int f;
      int g;
      int h;
      void *ptr;
      }

      cases machin;
      cases truc;

      machin.ptr = &truc;

      j'ai pas testé pour dire si ça marche mais c'est un premier jet ;-)
      0
  3. Guki
     
    Le titre est un peu mal choisi car les structures ne sont pas une spécificité du C++. J'aurai proposé "Pb struct C/C++".
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. JSS Messages postés 3743 Date d'inscription   Statut Contributeur 32
     
    lol ....

    c'est bon david ?

    JSS
    0
  6. david
     
    oui grand merci en fait c'est le post 6 qui fonctionne meme si il y a quelques erreurs de recopiage le principal y est
    0
    1. JSS Messages postés 3743 Date d'inscription   Statut Contributeur 32
       
      de rien

      Bonne journée !

      JSS
      0
  7. Jolkdarr
     
    Hello !

    Pour utiliser un pointeur sur un type de classe ou de structure, le compilateur a besoin de la déclaration seulement. Il se moque de connaître la définition car il n'en n'a simplement pas besoin. Il exige la définition d'un type lorsqu'il a besoin de connaître sa taille par exemple. Un pointeur sur tout type étant de taille fixe, il suffit juste de la déclaration.

    Considérons le programme suivant :

    class toto;

    int main()
    {
    toto* P = (toto*) 1;

    return int(P);
    }

    Ce programme compile, est linké et produit un exécutable qui fonctionne parfaitement alors que la classe est définie nulle part !!!!!!!

    Bien. Cela étant plus clair, répondons au problème de David :
    struct cases{
    int x;
    int y;
    int f;
    int g;
    int h;
    // ici je souhaiterais ajouter un pointeur vers "pere" du type cases
    };

    problème :
    struct cases
    {
    int x;
    int y;
    int f;
    int g;
    int h;

    // ici je souhaiterais ajouter un pointeur vers "pere" du type cases
    cases* Lien;
    };

    solution :
    Il suffit d'utiliser directement cases* dans la définition du type, le nom étant déjà déclaré.

    Exemple de programme :
    int main()
    {
    cases C1 = { 1, 2, 3, 4, 5, (cases*) 7 };
    cases C2 = { 2, 3, 4, 5, 6, &C1 };

    return int(C2.Lien = C2.Lien->Lien);
    }

    Question :
    Que retourne ce porgramme ?

    Take care !
    0
  8. Jolkdarr
     
    Errata :

    1) Il n'en a simplement pas...
    2) Programme complet :

    struct cases
    {
    int x;
    int y;
    int f;
    int g;
    int h;

    // lien de David :
    cases* Lien;
    };

    int main()
    {
    cases C1 = { 1, 2, 3, 4, 5, (cases*) 7 };
    cases C2 = { 2, 3, 4, 5, 6, &C1 };

    return int(C2.Lien = C2.Lien->Lien);
    }
    0
  9. Jolkdarr
     
    Maintenant que ces histoires de déclarations sont parfaitement claires pour tout le monde, que retourne le programme suivant ?

    #include <iostream>

    using namespace std;

    template<class T>
    struct cases
    {
    int x;
    int y;
    int f;
    int g;
    int h;

    // lien de David :
    cases<int*>* Lien;
    };

    int main()
    {
    cases<int*> C1 = { 1, 2, 3, 4, 5, (cases<int*>*) &C1 };
    cases<void*> C2 = { 2, 3, 4, 5, 6, &C1 };

    cout << static_cast<void*>(C2.Lien = C2.Lien->Lien) << endl;

    return 0;
    }

    (Ne trichez pas, juste en lisant le source !)
    0
  10. Jolkdarr
     
    Qu'imprime le programme ?

    PS. Il retourne 0, ça c'est plus facile ;)
    0
  11. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    En fait tu fait une une liste chainerinfinie sur elle même pour C1.
    Enfin, je rapel à Guki que dans une structure, on rapel le type pour un constructeur, et cela ne pose pas de problème.

    Salutation !
    Char Snipeur
    0