Liaison de deux fichiers .cpp et d’un fichier .h

Je fais un exercice (du troisième chapitre de Penser en C ++), mais j’ai un problème pour relier deux fichiers .cpp.

C’est l’exercice:

Créez un fichier d’en-tête (avec l’extension “.h”). Dans ce fichier, déclarez un groupe de fonctions en modifiant les listes d’arguments et renvoyez des valeurs parmi les suivantes: void, char, int et float. Créez maintenant un fichier .cpp qui inclut votre fichier d’en-tête et crée les définitions de toutes ces fonctions. Chaque définition doit simplement afficher le nom de la fonction, la liste des arguments et le type de retour afin que vous sachiez qu’elle a été appelée. Créez un deuxième fichier .cpp contenant votre fichier d’en-tête et définissant int main (), contenant les appels de toutes vos fonctions. Comstackz et exécutez votre programme.

J’ai créé les trois fichiers, mais lorsque j’essaie de comstackr le compilateur, donnez-moi cette erreur:

référence indéfinie à `func1 () ‘

référence indéfinie à `func2 (int) ‘|

référence non définie à `func3 (char, int, double) ‘|

référence indéfinie à `func4 () ‘|

|| === Construction terminée: 4 erreurs, 0 avertissements === |

Pourquoi ne peut-il pas trouver la déclaration de fonction?

##MODIFIER
Ce sont mes trois fichiers:

func_ex.h

void func1(void); int func2(int i); char func3(char c, int i, double d); float func4(void); 

func_ex.cpp

 #include "func_ex.h" using namespace std; void func1(void) { cout << "void func1(void)" << endl; } int func2(int i) { cout << "int func2(int i)" << endl; } char func3(char c, int i, double d) { cout << "func3(char c, int i, double d)" << endl; } float func4(void) { cout << "func4(void)" << endl; } 

func_ex_main.cpp

 #include "func_ex.h" #include  using namespace std; int main(int argc, char* argv[]) { func1(); int i; func2(i); char c; double d; func3(c, i, d); func4(); } 

J’utilise GCC en tant que compilateur (et Code :: Blocks en tant qu’IDE, mais je pense que ce n’est pas important).

Il semble que le fichier ne trouve pas les fonctions correctement. Le fichier d’en-tête est-il inclus dans les deux fichiers? Vous pouvez l’inclure comme:

 #include "myheader.h" 

Vous êtes-vous assuré de comstackr les deux fichiers ensemble? Tel que:

gcc -o monprogramme fichier1.cpp fichier2.cpp

 gcc -c func_ex.cpp -o func_ex.o gcc func_ex_main.cpp func_ex.o -o func_ex_main 

Il semble que chaque débutant passe par ceci (y compris moi-même), dans le fichier main.cpp, vous incluez le fichier .cpp et non le fichier .h ,

 //func_ex_main.cpp #include "func_ex.cpp" // instead of .h #include  using namespace std; //etc... 

parce que le fichier .cpp est lié à l’en-tête via l’inclusion dans ce fichier .cpp et que chaque définition de fonction est liée à la décélération via la notation :: précédant la définition.

N’oubliez pas que le constructeur et le destructeur par défaut du fichier .h sont déclarés et définis automatiquement (si vous ne l’avez pas écrasé ou surchargé), ce qui entraînera une erreur de compilation si vous venez de le redéfinir dans le fichier .cpp . si vous ne voulez pas le remplacer, ne mentionnez pas le constructeur, ni le destructeur, ni l’en-tête ni les fichiers source .

Pour ceux qui, comme moi, utilisent probablement IDE BloodShed Dev C ++.

Créez un dossier de projet, puis placez vos fichiers H et vos fichiers CPP dans votre dossier de projet.

J’ai eu le même problème que mentionné ci-dessus, la conclusion à laquelle je suis arrivé est que mon compilateur ne compilait que les fichiers H et ne lirait même pas les fichiers CPP qui y étaient liés. Lorsque je les mets dans un dossier de projet, mon compilateur comstack tous les fichiers, permettant ainsi à mon code de s’exécuter.

Voici un lien pour créer un dossier de projet pour ceux qui utilisent Bloodshed.

http://www.horstmann.com/bigcpp/help/bloodshed/index.html

En ce qui concerne les autres utilisateurs de l’IDE, je pense que le problème est similaire. Si quelqu’un a besoin de plus amples précisions, faites le moi savoir.

J’utilise aussi code :: blocks et j’ai eu le même problème. Le paramètre par défaut dans cet IDE est qu’un seul fichier est créé. Voici ce que j’ai fait: projet -> propriétés -> construire des cibles -> sélectionner les fichiers associés dans la section en bas à droite. J’espère que cela t’aides!

Tout d’abord, comment pouvez-vous avoir func1 (), func2 (), func3 () sans avoir d’instructions de retour. Essayez de mettre votre corps d’en-tête à l’intérieur de ces (#include gardes):

 #ifndef func_ex.h #define func_ex.h /* your code */ #endif 

Je pense que vous devriez avoir #include"func_x.cpp" dans votre func_main.cpp

Vous devez mettre un include comme ceci:

 #include "headerfilename.h" 

tout en haut de chaque document .cpp.