Liens entre fichiers dans g++
Récemment, j'ai essayé de compiler un programme en g++ (sur Ubuntu). Habituellement j'utilise Dev-C++ (sous Windows) et il fonctionne très bien aussi longtemps que je fais un projet et de mettre tous les fichiers nécessaires.
L'erreur qui se produit lors de la compilation du programme est:
$filename.cpp: undefined reference to '[Class]::[Class Member Function]'
Les fichiers utilisés sont les suivants:
Le code source (à l'.rpc) fichier avec la fonction main.
Le fichier d'en-tête avec les prototypes de fonction.
L' .fichier cpp avec les définitions pour chaque fonction.
Toute aide sera appréciée.
si vous pouviez poster votre code.....il sera d'une aide...
Dev-C++ est un environnement de développement intégré. Par défaut, il utilise le MinGW port de GCC.
Dev-C++ est un environnement de développement intégré. Par défaut, il utilise le MinGW port de GCC.
OriginalL'auteur E.O. | 2011-06-30
Vous devez vous connecter pour publier un commentaire.
Vous avez probablement essayé, soit compiler et lier au lieu de simplement la compilation des fichiers sources ou en quelque sorte oublié quelque chose.
Variation de un (tout en une seule ligne; recompile tout en même temps):
Variation de deux (étape par étape; si aucun
-o
est fourni, gcc va réutiliser le nom du fichier d'entrée et il suffit de changer l'extension lorsqu'il n'est pas de liaison; cette variation est plus utilisé pour les makefiles; vous permet d'ignorer les parties inchangées):Variation de trois (certains espaces réservés):
De ne pas la liste, mais les paramètres mentionnés ci-dessus pourrait tout aussi bien prendre les espaces réservés, par exemple,
g++ -c *.cpp
de compiler tous les fichiers cpp dans le répertoire en cours à o(objet), les fichiers du même nom.Dans l'ensemble, vous ne devriez pas trop vous inquiéter à ce sujet, sauf si vous avez vraiment de travailler sans aucune IDE. Si vous n'en êtes pas familiariser avec la syntaxe de ligne de commande, s'en tenir aux IDEs d'abord.
OriginalL'auteur Mario
De la ligne de commande de gcc devrait ressembler à:
Vérifier dans lequel le rpc fichier manquant fonction membre de classe est définie. Vous avez pas donné à gcc.
OriginalL'auteur Rémi
Vous pouvez également vérifier que la
#include
des balises dansfilename.cpp
. Supposons quefilename.cpp
utilise le code contenu dansmyclass.h
présent dans le même répertoire quefilename.cpp
. Supposons que la classe que g++ dit est indéfini contenues dansmyclass.h
et définis dansmyclass.cpp
. Donc, pour bien incluremyclass.h
dansfilename.cpp
, procédez de la manière suivante:filename.cpp
:#include <iostream>
#include <myclass.h>
..source code.
Dans le makefile:
filename.o: myclass.C myclass.h filename.cpp
g++ -I./-c filename.cpp -o filename.o
myclass.o: myclass.C myclass.h
g++ -c myclass.C -o myclass.o
Dans la remarque ci-dessus, l'utilisation de
-I.
option lors de la compilation defilename.cpp
. Le-I<directory>
demandeg++
pour inclure le chemin d'accès à la suite de la-I
partie dans le chemin de recherche. De cette façonmyclass.h
est correctement inclus.En l'absence de plus d'informations (la source peut-être), il est difficile de dire avec précision où se trouve le problème. Tous les efforts, mais de poignard dans le noir.
OriginalL'auteur Sriram
Je suppose que vous avez déclaré un membre de la fonction (généralement dans un
.h
ou.hpp
fichier), mais ont omis la définition correspondante de la fonction membre (généralement dans un.cpp
fichier).En c++, il est possible de déclarer une classe comme ceci:
avec un fichier cpp qui va comme
Remarque, il n'y a pas de
foo::y()
.Cela ne pose aucun problème à la compilation/processus de liaison, tant que la fonction de membre de
foo::y()
est référencé nulle part dans tout le code compilé.OriginalL'auteur René Nyffenegger