Problèmes d'include avec deux classes
Résolu/Fermé
A voir également:
- Problèmes d'include avec deux classes
- Deux comptes whatsapp - Guide
- Deux ecran pc - Guide
- Itinéraire google map entre deux adresses - Guide
- Un écouteur sur deux marche sans fil ✓ - Forum Casque et écouteurs
- I avec deux point - Forum Windows
1 réponse
VanDog
Messages postés
63
Date d'inscription
vendredi 17 juillet 2015
Statut
Membre
Dernière intervention
11 février 2016
13
Modifié par Whismeril le 7/08/2015 à 23:10
Modifié par Whismeril le 7/08/2015 à 23:10
Bonjour bonjour,
Je suis content qu'il y ait encore des questions C++ ^^
Alors voici ma réponse :
Les trois consignes de préprocesseur que tu as citées, à savoir
Leur but est d'éviter d'inclure plusieurs fois le même fichier. Par exemple, ton fichier
Pour éviter ce problème simplement qui revient toujours au cours de la création d'un programme, on utilise les balises gardiennes.
Le principe:
On définit une variable (qui souvent porte le nom du fichier ie: VOITURE_HPP) à la première inclusion du header (.h). Ensuite, les balises vérifient si cette variable existe pour continuer l'inclusion.
En gros :
Voici comment on utilise ces balises: on inclut une unique fois, pour cela on utilise un procédé booléen simple
Après, il peut exister un nouveau problème, bien plus léger :
Pour aller dans le détail, ton IDE dit ne pas connaitre Proprietaire dans le fichier Voiture.hpp car lors de sa définition il revient sur sa définition et ne la finit jamais.
Edit suppression de la signature contraire à la charte
Je suis content qu'il y ait encore des questions C++ ^^
Alors voici ma réponse :
Les trois consignes de préprocesseur que tu as citées, à savoir
#ifndef #define #endifsont à utiliser dans cet ordre. On les appelle des balises gardiennes ou gardes fous, bref choisis ton petit nom pour ces consignes.
Leur but est d'éviter d'inclure plusieurs fois le même fichier. Par exemple, ton fichier
Proprietaire.hdemande l'inclusion de
voiture.hdont la première ligne inclut
Proprietaire.hqui inclut.... Enfin bref, tu as une inclusion cyclique.
Pour éviter ce problème simplement qui revient toujours au cours de la création d'un programme, on utilise les balises gardiennes.
Le principe:
On définit une variable (qui souvent porte le nom du fichier ie: VOITURE_HPP) à la première inclusion du header (.h). Ensuite, les balises vérifient si cette variable existe pour continuer l'inclusion.
En gros :
#include "Voiture.h" -> #ifndef VOITURE_HPP // IF VOITURE_HPP is Not DEFined #define VOITURE_HPP // La variable n'existe par alors on la DEFINIT pour ne plus revenir ici. class ... {}; #endif // Si la variable existe alors on passe directement à cette ligne, l'include ne fait rien.
Voici comment on utilise ces balises: on inclut une unique fois, pour cela on utilise un procédé booléen simple
EST DEFINI / N'EST PAS DEFINI
Après, il peut exister un nouveau problème, bien plus léger :
#include "voiture.hpp"inclut un fichier depuis le dossier local
#include <voiture.hpp>inclut un fichier depuis le dossier signalé avant ( dans un Makefile, dans les propriétés de l'IDE etc...)
Pour aller dans le détail, ton IDE dit ne pas connaitre Proprietaire dans le fichier Voiture.hpp car lors de sa définition il revient sur sa définition et ne la finit jamais.
Edit suppression de la signature contraire à la charte
11 août 2015 à 08:54
J'avais bien identifié le problème (inclusion cyclique) mais je ne savais pas utiliser correctement les balises gardiennes.
Merci encore pour ta réponse détaillée, c'était facile à comprendre et très claire.
Ah et pour info, on apprend encore le C++ en BTS ^^
11 août 2015 à 10:09
Ça me soulage, je ne me sentais pas très clair, d'où les répétitions.
N'hésite pas à revenir demander de l'aide, on est là pour ça.
Bonne suite !