Redefinition de classe

k1koo Messages postés 7 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 26 mai 2008 - 1 avril 2008 à 17:04
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 - 3 avril 2008 à 10:47
bonjour j'ai un problème dès que je compile mon programme il me répond que je redéfinie mes classes :
CComSerie.h:45: erreur: redefinition of ‘class CComSerie’
CComSerie.h:46: erreur: previous definition of ‘class CComSerie’
sous visual je sais que c'est la fonction #pragma once mais sous linux ?
MERCI D'AVANCE

6 réponses

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
1 avril 2008 à 17:25
Bonjour,

Pour éviter les inclusions multiples sans utiliser le #pragma once :

#ifndef __FICHIER_HPP
#define __FICHIER_HPP

... tout le fichier d'entête ici ...

#endif // __FICHIER_HPP

C'est à dire que si la constante __FICHIER_HPP n'est pas définie, on la définit. Cela empêchera les inclusions suivantes puisque cette constante existera ! Comme nom de constante il faut utiliser un nom qui ne risque pas d'exister déjà, le construire à partir du nom du fichier est simple et plus sûr.

Jean-François
0
k1koo Messages postés 7 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 26 mai 2008
1 avril 2008 à 17:32
Merci bien pour cette réponse ! jvai allez tester tt de suite ;)
0
k1koo Messages postés 7 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 26 mai 2008
1 avril 2008 à 17:39
mais comment je peu l'utiliser ?
voila les fichiers d'entete de mon main :

#ifndef Watt
#define Watt

#include "Tension.h"
#include "Intensite.h"
#include "Puissance.h"
#include "Wattmetre.h"
#include "Envoi_Mail.h"
#include "Save_PUI.h"

#endif // Watt

est ce bon comme ca ?
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
1 avril 2008 à 17:50
Ce qui donne :

Voilà les fichiers d'entête de mon main :
#ifndef Watt
#define Watt
#include "Tension.h"
#include "Intensite.h"
#include "Puissance.h"
#include "Wattmetre.h"
#include "Envoi_Mail.h"
#include "Save_PUI.h"

#endif // Watt

Alors non ! Ce genre de fonctionnalité ne se place pas du tout dans les fichiers C/C++ (.c/.cpp) mais dans les fichiers d'entête (.h/.hpp). Dans le fichier main :

#include "Tension.h"
#include "Intensite.h"
#include "Puissance.h"
#include "Wattmetre.h"
#include "Envoi_Mail.h"
#include "Save_PUI.h"

Et dans chacun de ces fichiers, par exemple Tension.h :

#ifndef __TENSION_H__
#define __TENSION_H__
... Contenu actuel du fichier Tension.h ...
#endif // __TENSION_H__

Avec Intensite.h :

#ifndef __INTENSITE_H__
#define __INTENSITE_H__
... Contenu actuel du fichier Intensite.h ...
#endif // __INTENSITE_H__

Jean-François
0

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

Posez votre question
k1koo Messages postés 7 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 26 mai 2008
3 avril 2008 à 10:36
Merci bien j'ai compris en faite je mettais le #endif a la fin des fichiers #include alors qu'il fallait le mettre a la fin du fichier

Merci bien de ta réponse très précise
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
3 avril 2008 à 10:47
OK ! L'ensemble ifndef/define/endif doit encadré le contenu des fichiers qui risquent d'être inclus plusieurs fois, c'est à dire les fichiers d'entête .h/.hpp. Les fichiers source .c/.cpp n'ont aucune raison d'être inclus plusieurs fois.

Jean-François
0
Rejoignez-nous