programmation séparée - C++ - Programmation
Marsh Posté le 22-02-2005 à 19:27:13
me semble que c'est bien compliqué...
moi habituellement je fais comme ça
supposons un fichier test.cpp et test.h qui contienne comme tu l'as dis la déclaration des classes ainsi que l'implémentation...
ensuite, pour y avoir accès dans ton programme contenant le main(),
suffit de faire
include "test.h"
attention j'ai bien dis entre " " et pas en < >
ENFIN SI J'AI BIEN COMPRIS CE QUE TU VOULAIS...
Marsh Posté le 01-03-2005 à 23:12:07
koala13 a écrit : je fais un programme sur les classes en programmation séparée, c'est-à-dire qu'il y a un fichier.cpp qui contient les fonctions et un fichier.h qui contient la déclaration des fonctions. Mais pour tout relier, il faut écrire une en-tête (là est le problème!) |
oui c'est bien complique ton histoire deja tu mettres :
#ifndef a la place de #if !defined
tu peux faire
#ifndef (......)
#define ....
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
[tu declare la classe et ses membres]
#endif
c'est ton fichier .h
ensuite dans le .cpp
#include "fichier.h" // fichier en-tête personnel
class::class(){}
class::fct1(){}
~class::class(){}
// autres fonctions membres....
et voila
Marsh Posté le 02-03-2005 à 10:35:56
Bonjour tout le monde !
Je peux juste expliquer vite fait ce que c'est mais bon, je n'y connais pas grand chose non plus dans les en-têtes...
Citation : |
La premiére teste si le symbole commençant par AFX_STDAF_H__... a été defini.
# !defined est une directive qui met en oeuvre un test 'si non defini'
il fonctionne comme une instruction if.
Si le symbole de la directive n'existe pas, toutes les lignes de texte placées avant la directive #endif sont incluses, y compris la directive #define.
Dans le cas contraire, ces lignes #endif sont exclues
En fait sa permet d'éviter l'inclusion répétée du code du fichier dans un autre fichier.
A la premiére inclusion, le symbole commençant par AFX_STDAF_H__... est defini, ce qui evite des inclusions supplémentaires du même code.
En gros ces une protection pour éviter les problème liés à la duplication des définitions
La seconde paire dedirectives #if-#endfi remplit une fonction similaire, mais qui n'est disponible que sur les compilateur les plus récents (à vérifier à l'aide de _MSC_VER).
Si le compilateur est suffisament récent, la directive #pragma once est éxecutée, si bien qu'on a pas besoin de rouvrir le fichier
Voila, je sais pas si c'est bien expliqué et si cela peut aidé, mais j'ai fais de mon mieux.
--EDIT--
Je viens de trouver un liens si ca peut t'aider:
http://www.developpez.com/c/megacours/x2411.html
Marsh Posté le 02-03-2005 à 11:16:25
blastman a écrit : Bonjour tout le monde !
|
Pourquoi deja tu as des identificateurs aussi longs :
AFX_STDAFX_H__8FA4D038_CC51_4F29_A5E0_920AF9AB4F3F__INCLUDED_
alors que AFX_STDAFX_H aurai suffit
et dans ton fichier fonctions.h tu repetes ces macros pour eviter les inclusions multiples et les test de version > 1000
#if !defined AFX_FONCTIONS_H.....
#define
#if _MSC_VER....
#pragma...
#endif
// et la tu déclare les protypes de fonctions
#endif // a ne pas oublier
ensuite dans le cpp tu
#include "fonctions.h"
#include "vectors.h" ect...
et la tu definis les fonctions déclarees dans le fichier fonction.h
car tu ne peux pas les definir dans un entete
en esperant etre clair
Marsh Posté le 22-02-2005 à 19:09:35
je fais un programme sur les classes en programmation séparée, c'est-à-dire qu'il y a un fichier.cpp qui contient les fonctions et un fichier.h qui contient la déclaration des fonctions. Mais pour tout relier, il faut écrire une en-tête (là est le problème!)
Le fichier Vecteur.h a comme en-tête:
// Vecteur.h: interface for the Vecteur class.
#if !defined(AFX_VECTEUR_H__0E1BF777_9AA9_4C7E_9711_EB691155D51F__INCLUDED_)
#define AFX_VECTEUR_H__0E1BF777_9AA9_4C7E_9711_EB691155D51F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
et le fichier stdafx.h a comme en-tête:
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
#if !defined(AFX_STDAFX_H__8FA4D038_CC51_4F29_A5E0_920AF9AB4F3F__INCLUDED_)
#define AFX_STDAFX_H__8FA4D038_CC51_4F29_A5E0_920AF9AB4F3F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
Si vous y comprenez quelque chose, aidez-moi parce que je dois faire la même chose avec un fichier (qui s'appelle fonction.h) qui contient des fonctions qui ne sont pas membre de la classe Vecteur.
Si vous n'avez pas tout compris, j'eesayerai de mieu vous expliquer
Merci