Pb avec les fichiers cpp

Signaler
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010
-
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
Bon là c'est la première fois que ça me le fait.
Je bosse sous VC++6.
J'ai un projet avec trois fichiers :
estack.h
et
main.cpp
Rpn_Alg.cpp

J'ai déclaré et défini dans Rpn_Alg.cpp une fonction, nommée AlgToRpn.
Lorsque je veux l'utiliser dans main.cpp, j'obtient Undeclared Identifier.

Heeeeelp !

Saros

7 réponses

Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
10
Tu as mis le prototype de ta fonction dans ton header?
[mailto:julienbj@hotmail.com Savon]
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

En fait le problème, je crois, c'est que les fonctions contenues dans Rpn_Alg.cpp ne sont pas considérées comme publiques.
Mais je ne sais toujours pas comment faire, à vrai dire c'est mon premier projet sérieux en C++, mes connaissances sont -disons limitées...

Merci d'avance.

Saros
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

Le protoype de la fonction est dans Rpn_Alg.cpp
Scuse, j'avais pas vu ton message ^^
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
10
ok, et dans ton main tu inclues quoi?
[mailto:julienbj@hotmail.com Savon]
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Mets les protos des fonctions a rendre publiques dans un Rpn_Alg.h et dans les cpp qui ont besoin d'acceder, tu mets #include "Rpn_Alg.h"

ciao...
BruNews, MVP VC++
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

Il n'y a pas moyen de pouvoir rendre publiques les fonctions de Rpn_Alg.cpp ?
J'ai l'impression que c'est un peu limitatif, dans un gros projet par exemple, de ne pas pouvoir avoir des fonction globales à tous les fichier CPP...
Comme en VB, quand on veut séparer des fonctions, on les écrit dans différents modules, puis on peut les rendre publiques ou non par la suite.

Sinon, j'avais déjà essayé de mettre Rpn_Alg en .h, c'était un peu prise de tête. J'ai fini par mettre tout le code de Rpn_Alg dans main.cpp.

Merci beaucoup ;

Saros
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
10
>>Proposition:
Tu n'as qu'à créé un .h dans lequel tu mets les prototypes des fonctions que tu veux rendre globales à tous tes fichiers C ou CPP et tu l'inclues dans chacun de tes fichiers C et CPP
L'inconvénient de cette méthode, c'est que tes fichiers objets ne seront pas supers beaux!

>>Explication rapide de la compilation et du linkage
Sinon, en quelques mots pour t'expliquer l'utilité d'un header!
Il faut que tu indiques au compilateur la forme de tes fonctions (cad le prototype) pour qu'il puisse vérifier que lors de tes appels, tu passes les bons paramètres! Après cette phase de compilation (réalisation d'un fichier objet) il y a le linker qui entre en jeu! Celui-ci lie les fichiers objets entre eux. C'est donc lui qui recherche où est définie ta fonction.
C'est loin d'être limitatif, tu fais tout ce que tu veux avec ça!

>>Réaction à ce que tu dis
Par contre dans ce que tu dis plus haut, j'ai l'impression que tu avais juste changer l'extension de ton fichier cpp en un .h
Ce n'est plus du tout la même chose, même si c'est compilable!
Dans un header tu mets des inclusions à d'autre fichier h, tu mets des #define, tu définis des structures, tu mets les PROTOTYPES de tes fonctions, mais jamais tu mets du code!
Si tu as des questions sur les headers, hésite pas! Je ferais mon possible pour répondre!

>>ATTENTION DANGER
Ah oui, il faut aussi te dire qu'il faut que tu ne passes qu'une et une seule fois dans ton header pendant la compilation! Une fois que les données définies à l'intérieure de ton header sont définies, elles n'ont plus à être redéfinies!
Tu dois mettre en haut de ton header (je sais pas si c'est la seule méthode)
#ifndef NOMFICHIER_H_ //par exemple
#define NOMFICHIER_H_

et à la fin du fichier H:
#endif
comme ça tu définis le contenu du .h uniquemenbt si NOMFICHIER_H_ n'est pas défini, donc la première fois que tu rentres dans le .h, tu le définis, et ensuite ben tu sors du #ifndef

Bon, j'espere que c'est clair, c'est jamais évident à expliquer!
Si jamais j'ai fait des erreurs ou dit des choses à peine juste, hésiter pas! :)
[mailto:julienbj@hotmail.com Savon]