programmation séparée

programmation séparée - C++ - Programmation

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

Reply

Marsh Posté le 22-02-2005 à 19:09:35   

Reply

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...


Message édité par moi23372 le 22-02-2005 à 19:27:45
Reply

Marsh Posté le 22-02-2005 à 20:32:34    

MFC [:fear]

Reply

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!)
 
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


 
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 :D :D :D

Reply

Marsh Posté le 02-03-2005 à 10:35:56    

Bonjour tout le monde !  :hello:  
 
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 :


#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


 
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


Message édité par blastman le 02-03-2005 à 10:43:49

---------------
http://www.blastmanu.info
Reply

Marsh Posté le 02-03-2005 à 11:16:25    

blastman a écrit :

Bonjour tout le monde !  :hello:  
 
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 :


#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


 
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


 
 
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 :D :D :D
 
en esperant etre clair :D :D :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed