“在G ++ Cpp中未定义的引用”

似乎无法让错误消失。 错误如下。 我看了谷歌,仍然无法弄清楚。 这不像我对Cpp是新手,但是暂时还没有被愚弄。

奇怪的是它在Windows中使用G ++ …

错误:

  • [泽@ fed0r! – – ** _ _ *] $ g ++ main.cpp
  • /tmp/ccJL2ZHE.o:在main函数中:
  • main.cpp 🙁 .text + 0x11):未定义的引用“Help :: Help()”
  • main.cpp 🙁 .text + 0x1d):未定义引用到`Help :: sayName()'
  • main.cpp :(。text + 0x2e):未定义引用到`Help ::〜Help()'
  • main.cpp 🙁 .text + 0x46):未定义引用到`Help ::〜Help()'
  • collect2:ld返回1退出状态

main.cpp中

#include <iostream> #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 <iostream> #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

你必须告诉编译器你想要编译的所有文件,而不仅仅是第一个。

你应该添加help.o到你的g ++行:

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

通过将它分成两行,可以节省编译时间(对于较大的项目),因为只有在更改时才能编译help.cppmakeMakefile使用得很好会为你节省很多头痛:

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