Probleme de redéfinition dans une structure

Résolu
Manubbosse Messages postés 16 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 10 juillet 2008 - 25 juin 2008 à 11:24
Manubbosse Messages postés 16 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 10 juillet 2008 - 25 juin 2008 à 16:42
Bonjour à tous.

Je suis stagiaire dans une entreprise et je dois (entre autre) programmer un coeur de calcul (en C++) à intégrer dans un logiciel.
Malheureusement, je suis un vrai néophyte en matiere de programmation. J'ai donc quelques problemes.... (comment ça, normal?)

J'essaye de stocker les données entrées dans une boite de dialogue dans un tableau.
voici les parties de codes:

calcul facteur solaire.h:

struct

TAB_RESULTAT {

float tauSPface1;

float tauSPface2;

float rhoSPface1;

float rhoSPface2;

float emissiviteNface1;

float emissiviteNface2;

float epaisseur; } ;

/*

struct TAB_RESULTAT Tab_Resultat[NB_MAX_COUCHE];

struct TAB_RESULTAT Tab_Resultat[2];

struct TAB_RESULTAT Tab_Resultat[3];

struct TAB_RESULTAT Tab_Resultat[4];

struct TAB_RESULTAT Tab_Resultat[5];

struct TAB_RESULTAT Tab_Resultat[6];

*/

//typedef struct TAB_RESULTAT TAB_RESULTAT;

 test3dlg.cpp:

TAB_RESULTAT Tab_Resultat [999];

// instanciation : mémoire réservée[...]

void

Ctest3Dlg::BtStockage(){

int b;

for (b = 0; b < NB_MAX_COUCHE; b++){

Tab_Resultat[b].tauSPface1 = GetDlgItemInt(ED_TAUSP_0 + b);

Tab_Resultat[b].rhoSPface1 = GetDlgItemInt(ED_RHOSP_0 + b);

Tab_Resultat[b].tauSPface2 = GetDlgItemInt(ED_TAUSP_1 + b);

Tab_Resultat[b].rhoSPface2 = GetDlgItemInt(ED_RHOSP_1 + b);

Tab_Resultat[b].emissiviteNface1 = GetDlgItemInt(ED_EMISSIVITE_NORMALE_0 + b);

Tab_Resultat[b].emissiviteNface2 = GetDlgItemInt(ED_EMISSIVITE_NORMALE_1 + b);

Tab_Resultat[b].epaisseur = GetDlgItemInt(ED_EPAISSEUR_LAME_AIR + b);

}

}

 
  Lorsque je compile, cela me donne les erreurs suivantes:
calculs facteur solaire.h(11) : error C2011: 'TAB_RESULTAT' : redéfinition du type 'struct'

et plus loin:

test3dlg.cpp(151) : error C2027: utilisation du type non défini 'TAB_RESULTAT'

J'ai également mis dans le .h, en commentaire, d'autre essais pour résoudre mon probleme mais qui n'étaient pas concluant. 

Il me semble que j'ai bien déclaré ma structure... me serais-je trompé?
Merci beaucoup pour votre aide!!!!

Manu

6 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
25 juin 2008 à 16:31
Si compilé en C++, mettre struct ou non devant la déclaration de la variable ne changera rien.

L'erreur dit: "redéfinition du type struct"

Ceci me laisse penser que tu redéfinis ta structure à plusieurs endroits.

Par exemple, si tu inclus solaire.h dans testDlg3d.h et test3.h, étant donné qu'il n'y a pas de protection afin d'éviter les inclusions multiples dans solaire.h, solaire.h se retrouvera, au final, inclus 2 fois dans test3dlg.cpp et ta structure y sera définit aussi 2 fois.

Essais d'ajouter ceci en tout début de fichier à solaire.h
#ifndef __INCL_SOLAIRE
#define __INCL_SOLAIRE

puis ceci en toute fin de fichier
#endif

Ça devrait empêcher solaire.h les problèmes d'inclusion multiple pour solaire.h. À prévoir pour tes autres header aussi.

C++ (@++)<!--
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
25 juin 2008 à 12:01
Dans ton fichier cpp tu a oublier de mettre 'struct' devant TAB_RESULTAT...
declare tes structures comme ca, ca t'evitera ce genre de problemes:

typedef struct _tab_resultat
{
float tauSPface1;
float tauSPface2;
float rhoSPface1;
float rhoSPface2;
float emissiviteNface1;
float emissiviteNface2;
float epaisseur;
}TAB_RESULTAT, *LPTAB_RESULTAT;

Neo_Fr
0
Manubbosse Messages postés 16 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 10 juillet 2008
25 juin 2008 à 13:41
En fait j'avais déjà essayé de mettre le:

struct  TAB_RESULTAT Tab_Resultat [999];

mais j'ai exactement la meme erreur.
 
Par contre, je ne comprends pas le *LPTAB_RESULTAT.

il faut utiliser un pointeur ?

en tout cas merci de ta réponse!


 
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
25 juin 2008 à 13:55
LPTAB_RESULTAT est simplement un pointeur sur une struct du type TAB_RESULTAT..

Pour en revenir a ton probleme, ds ton header remplace ta declaration de ta struct par celle que j'ai poster plus haut, puis ds test3dlg.cpp rajoute le #include "solaire.h" tt en haut si ce n'est pas deja fait, puis declare ton tableau de structure comme ca:
TAB_RESULTAT Tab_Resultat[512];
Et la normalement ca compile sans erreur..

Neo_Fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Manubbosse Messages postés 16 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 10 juillet 2008
25 juin 2008 à 14:25
Nan, ça ne marche malheureusement pas.
J'obtiens toujours exactement la meme erreur.

est ce que ça peut etre du à l'ordre des includes dans test3dlg.cpp ?

#include

"stdafx.h"#include

"test3.h"#include

"test3Dlg.h"#include

"calcul emmissivite corrigee.h"#include

"calculs facteur solaire.h"

J'ai peut etre oublié autre part quelques chose d'évident mais auqel je ne pense pas parceque je suis débutant...
0
Manubbosse Messages postés 16 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 10 juillet 2008
25 juin 2008 à 16:42
Merci beaucoup!!!!!

Ca fonctionne bien maintenant et je vais pouvoir avance dans mon travail.

Encore merci a vous deux qui avaient pris le temps de me répondre.

C++ ( lool )

Manu
0
Rejoignez-nous