«Référence indéfinie à» dans G ++ Cpp

Je n’arrive pas à faire disparaître les erreurs. Les erreurs sont ci-dessous. J’ai regardé sur google et n’arrive toujours pas à le comprendre. Ce n’est pas comme si je suis nouveau à Cpp, mais je ne l’ai pas dupé depuis un moment.

La chose étrange est que cela a fonctionné avec G ++ dans Windows …

Les erreurs:

  • [ze @ fed0r! – – ** _ _ *] $ g ++ main.cpp
  • /tmp/ccJL2ZHE.o: Dans la fonction `main ‘:
  • main.cpp :(. text + 0x11): référence non définie à `Help :: Help () ‘
  • main.cpp :(. text + 0x1d): référence non définie à `Help :: sayName () ‘
  • main.cpp :(. text + 0x2e): référence non définie à `Help :: ~ Help () ‘
  • main.cpp :(. text + 0x46): référence non définie à `Help :: ~ Help () ‘
  • collect2: ld a renvoyé 1 état de sortie

main.cpp

#include  #include "Help.h" using namespace std; int main () { Help h; h.sayName(); // *** // *** // *** return 0; } 

Help.h

 #ifndef HELP_H #define HELP_H class Help { public: Help(); ~Help(); void sayName(); protected: private: }; #endif // HELP_H 

Help.cpp

 #include  #include "Help.h" using namespace std; Help::Help() { // Constructor } Help::~Help() { // Destructor } void Help::sayName() { cout << " ***************" << endl; cout << " ************************************" << endl; cout << " ************" << endl; cout << " *********************" << endl; } 

g ++ main.cpp Help.cpp

Vous devez indiquer au compilateur tous les fichiers que vous souhaitez comstackr, pas seulement le premier.

Vous devriez append help.o à votre ligne g ++:

 g++ -c help.cpp -o help.o g++ help.o main.cpp 

En le divisant en deux lignes, vous pouvez gagner du temps de compilation (dans le cas de projets plus volumineux), car vous ne pouvez comstackr help.cpp que lorsqu’il a été modifié. make et Makefile bien utilisés vous éviteront beaucoup de maux de tête:

 #Makefile all: main main: help main.cpp g++ -o main help.o main.cpp help: help.cpp g++ -c -o help.o help.cpp 

J’ai eu le même problème avec ma dissortingbution Linux Lubuntu et cela créait le problème pour mon constructeur, destructeur, il ne les reconnaissait pas.

En fait, cela se produit si vous ne comstackz que les trois fichiers ensemble. Donc, une fois que vous avez enregistré tous vos fichiers, procédez comme suit:

 $ g++ main.cpp Help.h Help.cpp $ ./a.out 

./a.out est le fichier exécutable de Linux, désolé mais je ne sais pas pour Windows. Et votre programme se déroulerait sans heurts.