Problèmes d'include avec deux classes
Résolu
Utilisateur anonyme
-
VanDog -
VanDog -
A voir également:
- Problèmes d'include avec deux classes
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Nombre de jours entre deux dates excel - Guide
- J'ai deux compte facebook avec la meme adresse mail ✓ - Forum Facebook
- Deux whatsapp sur un téléphone - Guide
1 réponse
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
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 ^^
Ç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 !