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 :

struct contenant un pointeur d'objet déclarer dans le meme header


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Par défaut struct contenant un pointeur d'objet déclarer dans le meme header
    Bonjour le monde,

    Ok... j'utilise une extension GNU pth qui permet de gérer les thread dans un thread. Donc le kernel de linux croit qu'il n'y a qu'un thread alors que j'en fais tourner plusieurs... mais là n'es pas la question...

    J'utilise une fonction de pth nommée pth_event() qui demande trois argument, le premier est le type d'event (dans mon cas FUNC, qui permet de faire en sorte que pth appel une methode tout les x temps), le second un pointeur vers la fonction voulue, un troisième qui représente les arguments de la fonction et un dernier qui défini le temps entre les appels.

    Mon problème est le suivant. J'aimerais lui passer en paramètre un pointeur vers une fonction de broker. Alors je tape le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pth_event(FUNC,&StartReceiveNoThread,NULL,pth_time(0,50));
    ma fonction (ReceiveNoThread est une fonction de la classe broker...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void paroc_broker::StartReceiveNoThread(){
      if (ReceiveNoThread()){
        printf("Request getted\n");
      }else{
        printf("no Request to get\n");
      }
    }
    et le compilateur me retourne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    broker.cc:261: error: ISO C++ forbids taking the address of an unqualified
       non-static member function to form a pointer to member function.  Say `&
       paroc_broker::StartReceiveNoThread'
    Je vérifie ma fonction. Elle est pas static. Heureux d'avoir trouvé si vite mon problème je la met en static.
    La compilation passe, mais bien sur comme elle est en static elle ne peut plus atteindre l'objet broker et donc il ne voit plus ma fonction ReceiveNoThread.

    Je me décourage pas et je construit une struct qui contient le broker que je passe en paramètre à StartReiceiveNoThread()

    Le problème est que la struct doit être déclarer dans le broker.h et si je le déclare comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include ...
    ...
    struct myStruct
    {
    broker * br;
    mySocket * s;
    }
     
    class broker {
    ...
    }
    Il me sort l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ../include/broker.h:47: ERROR :broker has been declared as non-class data type
    je me suis dit... ok il sait pas encore ce qu'est broker alors je l'ai mise à la fin du .h, mais il me sort une autre erreurs... dans la fonction StartReceiveNoThread() dont voici la nouvelle implémentation utilisant la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void paroc_broker::StartReceiveNoThread(myStruct * pnt){
      if (pnt->br.ReceiveNoThread(pnt->s,50)){
        printf("Request getted\n");
      }else{
        printf("no Request to get\n");
      }
    }
     
    erreur à la compilation :
    broker.cc:500: error: request for member `ReceiveNoThread' in `
       pnt->myStruct::br', which is of non-aggregate type `broker*

    Je sais pas trop de quoi ca peut venir... Auriez vous une idée par hasard ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    heu vu que le membre broker de ta structure est un pointeur ce serait pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void paroc_broker::StartReceiveNoThread(myStruct * pnt){
      if (pnt->br->ReceiveNoThread(pnt->s,50)){
        printf("Request getted\n");
      }else{
        printf("no Request to get\n");
      }
    }
    ?

  3. #3
    Membre confirmé Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Par défaut
    oui en effet..... I'm very honteux.... bon ben ca c'est fait...
    Merci pour la remarque...

    ET sinon est ce que c'est le conportement normal de ne pas accepter de déclarer un struct contenant un pointeur vers un objet qui n'est pas encore déclarer ?

    J'imagine que oui, mais je voudrais juste avoir une confirmation...

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Oui c'est normal, tout type que tu utilises doit avoir été déclaré auparavant. D'où l'intérêt des forwards declarations. Dans ton cas tu n'étais pas obligé de déplacer la déclaration myStruct à la fin de ton fichier, ce bout de code aurait suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include ...
    ...
    class broker;
    ...
    struct myStruct
    {
    broker * br;
    mySocket * s;
    }
     
    class broker {
    ...
    }

  5. #5
    Membre confirmé Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Par défaut
    Merci pour l'info... je me coucherai encore moins con ce soir... c'est fou ce qu'on devient intelligent avec ce forum

    ok je sors...


    Bref. Merci pour vos réponses, mon problème est à présent résolus

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

Discussions similaires

  1. Pointeur vers objet dans un vecteur
    Par julieng31 dans le forum C++
    Réponses: 3
    Dernier message: 27/09/2013, 09h29
  2. Réponses: 5
    Dernier message: 09/09/2011, 23h27
  3. Réponses: 21
    Dernier message: 03/06/2010, 18h26
  4. Structure dans une Structure : Pointeur ou Objet?
    Par TNT89 dans le forum Langage
    Réponses: 11
    Dernier message: 13/07/2009, 19h53
  5. Réponses: 8
    Dernier message: 23/11/2006, 11h30

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