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 :

Probleme lors d'un renvoi de stucture


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Par défaut Probleme lors d'un renvoi de stucture
    Bonjour

    J'ai un probleme je n'arrrive pas à renvoyer ma structure par le biais d'une fonction et si possible j'aimerai savoir ce qui est inutile dans mon code .
    Merci

    voila le code

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    struct azi_hau essai(double AD , double declinaison , double longitude , double latitude)
    {
     
    struct azi_hau
        {
           double azimut;
           double hauteur;
     
        };
    struct azi_hau essai;
    double azimut;
    double H ;
    double phi;
    double theta;
    double h;
    double D1;
    double d2;
    double delta;
    double az;
    double pi;
     
      pi  = 3.141592 ;
      latitude = (latitude*2*pi)/360;
      longitude = (longitude*2*pi)/360;
      declinaison  = (declinaison *2*pi)/360;
     
     
      H  = pi/2-latitude;
     
      phi = 2*pi*(AD-12*3600)/(24*3600) + longitude;
     
      if ( phi>pi )
        {
            phi -= 2* pi ;
        }
      if ( phi<-pi )
        {
            phi += 2* pi;
        }
     
      if ( phi>=0 )
        {
            theta =  acos(   (cos(phi)*cos(H))/
                    (sqrt(sin(phi)*sin(phi)+cos(phi)*cos(phi)*cos(H)*cos(H))))  ;
        }
      else
        {
            theta =  2*pi -acos(   (cos(phi)*cos(H))/
                    (sqrt(sin(phi)*sin(phi)+cos(phi)*cos(phi)*cos(H)*cos(H))))  ;
        }
     
      h = asin(cos(phi)*sin(H));
     
      D1    = cos(latitude)*cos(pi/2-declinaison);
      d2    = cos(h)*sin(pi/2 - declinaison);
      delta = sqrt(d2*d2+D1*D1-2*D1*d2*cos(theta));
      az    = acos((delta*delta+D1*D1-d2*d2)/(2*D1*delta));
     
     
      if ( phi>=0)
         {
           essai.azimut =2*pi-az;
         }
     
      else
         {
           essai.azimut =az;
         }
         essai.hauteur = asin(sin(lat)*sin(dd)+cos(fi)*cos(lat)*cos(dd));
         return essai;
     
         }

    j'ai deux erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ligne 8 : return type is an incomplete type 
    ligne 76:warning ; return with a value, in fonction returning void

    [-mod- Merci de lire les règles du forum. Elles expliquent, entre autre, comment placer les balises de code]

  2. #2
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    je n'arrive pas à lire correctement ton code, pourrais tu mettre les balises codes (representées par # dans ta barre d'outil juste au dessus !)

    Ca rendrait ton code plus lisible à ceux qui souhaite t'aider.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, je te déconseille de renvoyer une structure mais plutôt un pointeur sur une structure (surtout si ta structure est grosse en taille). Tu as écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    truct azi_hau essai(double AD , double declinaison , double longitude , double latitude)
    {
     
    struct azi_hau
    {
    double azimut;
    double hauteur;
     
    };
    struct azi_hau essai;
    j'espère que dans ton main, la définition de la structure azi_hau est réalisée.

    Je te conseille un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct azi_hau * essai = malloc(blabla);
    struct azi_hau essai(double AD , double declinaison , double longitude , double latitude)
    {
    blabla
    }
    Tu as aussi écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if ( phi>=0)
    {
    essai.azimut =2*pi-az;
    }
     
    else
    {
    essai.azimut =az;
    }
    essai.hauteur = asin(sin(lat)*sin(dd)+cos(fi)*cos(lat)*cos(dd));
    return essai;
     
    }
    si phi<=0, que renvoie ta fonction ? Rien (sauf erreur de ma part, bien entendu).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 38
    Par défaut
    Salut !

    En fait, ça serait pour créer une dll. La fonction représente une API. et cet API devra retourner une structure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si phi<=0, que renvoie ta fonction ? Rien (sauf erreur de ma part, bien entendu).
    Non non, si phi <=0 la fonction renvoi bien 'essai', la strucure (or, ça ne marche pas ...)
    (en indentant correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ( phi>=0)
    {
        essai.azimut =2*pi-az;
    }
    else
    {
        essai.azimut =az;
    }
    essai.hauteur = asin(sin(lat)*sin(dd)+cos(fi)*cos(lat)*cos(dd));
    return essai;
    )

    Tous les calculs de la fonctions marchent très bien vu qu'on a déjà compiler la dll sans les structures, mais on est obligé de faire 2 appel d'API, une pour la hauteur et l'autre pour l'azimut.
    Ce que l'on aimerai bien faire, c'est avoir les 2 en un seul appel !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j'espère que dans ton main, la définition de la structure azi_hau est réalisée.
    Oui, c'est bien défini.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Salut, je te déconseille de renvoyer une structure mais plutôt un pointeur sur une structure (surtout si ta structure est grosse en taille).
    Même pour une DLL ??
    Le programme principale (l'interface graphique qui n'est pas en C) ne gère pas les pointeurs !

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par Black Templar
    Non non, si phi <=0 la fonction renvoi bien 'essai', la strucure (or, ça ne marche pas ...)
    oups, effectivement. J'ai dit une bêtise...

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Désolé, mais qu'est-ce que tu ne comprends pas dans :

    ligne 8 : return type is an incomplete type
    ligne 76:warning ; return with a value, in fonction returning void
    ??

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Pour les premieres lignes que j'ai lues du code, il y a déjà une erreur manifeste...

    Je cite:
    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
     
    /*Définition de la fonction essai qui est sensée renvoyer un structure de type
      azi_hau... qui n'est pas déclarée au moment où le compilateur passe
      sur cette définition
      */
    struct azi_hau essai(double AD , double declinaison , double longitude , double latitude)
    {
    /* définition de la structure azi_hau, déjà trop tard, mais en plus,
      à l'intérieur d'une fonction
     */
    struct azi_hau
    {
    double azimut;
    double hauteur;
     
    };
    Est il nécessaire de rappeler qu'un compilateur ne connait que ce qu'il a rencontré dans les lignes qui précedent celle qu'il est occupé à traiter

    Le résultat en est que, avant que tu n'essaie pour la première fois d'utiliser la structure azi_hau, elle doit avoir été préalablement définie

    Je ne suis d'ailleurs pas du tout persuadé que le C autorise, d'une manière ou d'une autre, le fait de définir une structure au sein d'une fonction...

    En tout état de cause, s'il l'autorise, la structure n'est utilisable qu'à l'intérieur du bloc d'instruction dans lequel elle est définie... et donc, en aucun cas en dehors de la fonction dans laquelle la définition a lieu
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par koala01
    Je ne suis d'ailleurs pas du tout persuadé que le C autorise, d'une manière ou d'une autre, le fait de définir une structure au sein d'une fonction...
    Si, pour un usage local, pourquoi pas... Ca m'est déjà arrivé dans des traitements un peu compliqués...

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Si, pour un usage local, pourquoi pas... Ca m'est déjà arrivé dans des traitements un peu compliqués...
    Ah, d'accord... Mais, dans ce cas particulier, la structure ne peut sans doute pas etre utilisée en dehors du bloc d'instructions locales dans lequel elle a été déclaré, ou me trompes-je lourdement
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par koala01
    Ah, d'accord... Mais, dans ce cas particulier, la structure ne peut sans doute pas etre utilisée en dehors du bloc d'instructions locales dans lequel elle a été déclaré, ou me trompes-je lourdement
    J'ai bien précisé 'usage local'. C'est à dire dans le bloc dans laquelle elle a été définie.

Discussions similaires

  1. [ADO] Probleme lors de l'execution d'une requete...
    Par NoisetteProd dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2004, 12h43
  2. Réponses: 13
    Dernier message: 10/05/2004, 16h49
  3. [MYSQL] Probleme lors de la compilation
    Par Nasky dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 24/02/2004, 17h04
  4. probleme lors du passage de paramètre
    Par maxmj dans le forum ASP
    Réponses: 4
    Dernier message: 18/11/2003, 00h15
  5. problem lors de l'ecriture d'un fichier
    Par gemai dans le forum C
    Réponses: 20
    Dernier message: 29/08/2003, 15h01

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