Redefinition de classe

Signaler
Messages postés
7
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008
-
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
-
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

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

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
Messages postés
7
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008

Merci bien pour cette réponse ! jvai allez tester tt de suite ;)
Messages postés
7
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008

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 ?
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

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
Messages postés
7
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
26 mai 2008

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
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

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