Probleme de redéfinition dans une structure [Résolu]

Signaler
Messages postés
16
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
10 juillet 2008
-
Messages postés
16
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
10 juillet 2008
-
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

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
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++ (@++)<!--
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
16
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
10 juillet 2008

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!


 
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
16
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
10 juillet 2008

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...
Messages postés
16
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
10 juillet 2008

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