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 :

macro pour un objet puis passage dans fonction


Sujet :

C

  1. #1
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut macro pour un objet puis passage dans fonction
    Bonjour à tous,

    Je rencontre un petit problème dans la réalisation d'un serveur, plus particulierement dans la gestion des clients.

    Mes clients sont conduits par une liste chainée.
    Pour éviter des déclarations inutiles, j'utilise les macros.

    Ma structure valise se compose d'un pointeur sur la valise suivante ainsi que d'une structure client.
    Ma liste est une suite de valises ...

    Dans mon serveur.c je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define pCur ((t_valise *)sc)
    je fais un petit traitement, puis j'envoie ce pCur en paramètre dans ma fonction Sock:

    Arrivé dans ma fonction sock, dès que j'utilise pCur ( ... surnommé en pa ... ) comme par exemple pour ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    closesocket(pa->Myclient.Sock);
    j'ai l'erreur suivante :

    |47|error: invalid type argument of `->'|
    |48|error: invalid type argument of `->'|
    |49|error: invalid type argument of `->'|
    J'ai l'impression que lors de l'appel de ma fonction Sock() je n'envoie pas ce que je devrais envoyer ..

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Quel est le prototype de la fonction Sock ?

  3. #3
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int Sock(int sc, int pa);

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int Sock(int sc, int pa);
    Ca ne fonctionnerait pas mieux avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int Sock(int sc, t_valise* pa)
    ?

    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int Sock(int sc, int pa)
    {
        t_valise* pvalise = pa;
       /* ... */
        closesocket(pvalise ->Myclient.Sock);
    }

  5. #5
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut
    Je viens de tester ta deuxieme proposition et elle fonctionne, cependant je ne comprend pas mon erreur ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Points : 160
    Points
    160
    Par défaut
    Le '->' est en fait une simplification syntaxique.

    Au lieu d'écrire *blah.machin, on écrit blah->machin

    Dans ton cas, pa n'était pas un pointeur, donc tu ne pouvais pas écrire *pa.truc (ou pa->truc).

  7. #7
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut
    Pourtant ce que je passe en paramètre est bel et bien un pointeur non ?

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par jbarreau-mainson Voir le message
    Pourtant ce que je passe en paramètre est bel et bien un pointeur non ?
    Dans la fonction appelante, le paramètre est bien un pointeur.

    Dans la fonction appelée, c'est un entier tout bête.

    Le compilateur accepte de faire la conversion car ces deux types font la même taille.

    Un peu de lecture :
    http://emmanuel-delahaye.developpez....age=Page5#LXXI
    http://emmanuel-delahaye.developpez....ge=Page5#LXXII
    Dernière modification par Deepin ; 21/07/2011 à 09h09.

  9. #9
    Membre averti Avatar de jbarreau-mainson
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    446
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 446
    Points : 412
    Points
    412
    Par défaut
    Ok c'est plus clair, merci à vous.

  10. #10
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par BSans Voir le message
    Le '->' est en fait une simplification syntaxique.

    Au lieu d'écrire *blah.machin, on écrit blah->machin
    ....
    Non :
    Au lieu d'écrire (*blah).machin, on écrit blah->machin

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/09/2014, 16h09
  2. macro pour creer objet dans userform
    Par redstoff dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/02/2011, 15h44
  3. Macro pour coller série de cellules dans liste
    Par Phyvon61 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/01/2009, 19h26
  4. Macro pour ajouter un nouvel élément dans un tableau
    Par dudu134 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/02/2007, 16h31
  5. Réponses: 8
    Dernier message: 09/01/2007, 16h30

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