Retour à l'accueil
Accueil Aide Rechercher Calendrier Identifiez-vous Inscrivez-vous
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
21 Septembre 2019 à 14:37

Connexion avec identifiant, mot de passe et durée de la session
Règlement | Grades du forum | L'équipe de modération | Album photo | Chat
Rechercher:     avancée
Forums Zelda Solarus  |  Jeux amateurs  |  Programmation  |  Topic: [Résolu] [C++] Problème d'inclusion 0 Membres et 1 Invité sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: [Résolu] [C++] Problème d'inclusion  (Lu 2169 fois)
Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« le: 12 Septembre 2011 à 22:46 »

Je suis actuellement partagé et ne sais trop que faire vis-à-vis d'un problème d'inclusion en C++. Je vais essayer de prendre un exemple simplifié pour illustrer mon problème. Je suis certain qu'il y a une réponse toute bête, mais je ne la vois pas (la fatigue peut-être ? :P).

Disons que je veux faire une librairie mathématiques (c'est un pur exemple), et que j'ai les fichiers suivants :
  • cercle.hpp
  • cercle.cpp
  • disque.hpp
  • disque.cpp

Estimons que j'aie juste la classe Cercle dans cercle.hpp et la classe Disque dans disque.hpp et que toutes leurs fonctions soient définies dans les .cpp, un truc basique, quoi.

Je veux avoir les fonctions suivantes :

Code: [Select]
class Cercle
{
    ...
    // Constructeur
    Cercle(Disque& D);
   ...
};

et

Code: [Select]
class Disque
{
    ...
    // Constructeur
    Disque(Cercle& C);
   ...
};

Je suis censé me débrouiller comment avec l'inclusion des différents fichiers pour ne pas avoir de problèmes ?^^"

Merci d'avance de vos réponses :)
« Dernière édition: 13 Septembre 2011 à 18:53 par Morwenn » Journalisée

Noxneo
Guest


Courriel
« Répondre #1 le: 13 Septembre 2011 à 01:16 »

"Forward declaration" dans les headers.

Dans Cercle.cpp:

Code: [Select]
class Disque;

Class Cercle{
[...]
}

Dans Disque.cpp:

Code: [Select]
class Cercle;

class Disque{
[...]
}

Pas besoin d'inclure de headers tant que les seuls appels à la classe forward declared sont sous forme de références ou de pointeurs. Dans tes fichiers d'implémentations (*.cpp), tu inclues la classe comme de coutume. N'oublie pas les headers guards.

Aussi, on est plus sous DOS3.0, pas besoin de mettre "hpp" comme extension de headers- "h" c'est plus joli :ninja:
« Dernière édition: 13 Septembre 2011 à 01:19 par Guillaume » Journalisée
Morwenn
Sheikah
*
Offline Offline

Messages: 3 268


And so what?


WWW Courriel
« Répondre #2 le: 13 Septembre 2011 à 18:52 »

Bah merci beaucoup, je ne pensais pas que ça marchait aussi pour les classes (trop habitué au C, et pas assez aux principes du CPP). Quand je disais qu'il y avait une méthode simple... x)

Pour les ".hpp", c'était juste histoire que ce soit clair à 100%. Mais je suis d'accord pour dire que ".h", ça fait mieux :P
Journalisée

Christopho
Administrateur
Héros
*
Offline Offline

Messages: 6 209


Mymy, je t'aime :)


WWW Courriel
« Répondre #3 le: 13 Septembre 2011 à 19:01 »

L'avantage des .hpp est que les éditeurs de texte font de la meilleure coloration syntaxique que les .h, généralement considérés par défaut comme du C.
Journalisée

Chaîne Twitch : diffusion en direct de sessions de développement de Solarus, de création de jeux, de parties de jeux vidéo.
Chaîne YouTube : replays des diffusions en direct, tutos Solarus
Compte Twitter : pour être au courant des nouveautés
Chat Discord : pour discuter en direct avec la communauté Solarus
Noxneo
Guest


Courriel
« Répondre #4 le: 13 Septembre 2011 à 20:50 »

L'avantage des .hpp est que les éditeurs de texte font de la meilleure coloration syntaxique que les .h, généralement considérés par défaut comme du C.

Si tu utilises un éditeur en carton, c'est sûr :P
Journalisée
Pages: [1] Imprimer 
Forums Zelda Solarus  |  Jeux amateurs  |  Programmation  |  Topic: [Résolu] [C++] Problème d'inclusion
Aller à:  

Propulsé par MySQL Propulsé par PHP Powered by SMF 2.0.15 | SMF © 2006, Simple Machines LLC XHTML 1.0 Transitionnel valide ! CSS valide !
Zelda Solarus 2009Skin par Eidarloy
Solarus-Games