【问题标题】:"undefined reference to" in G++ CppG ++ Cpp中的“未定义引用”
【发布时间】:2011-10-22 03:17:17
【问题描述】:

似乎无法消除错误。错误如下。我在谷歌上看过,仍然无法弄清楚。这不像我是 Cpp 的新手,但有一段时间没有被它愚弄过。

奇怪的是它可以在 Windows 中使用 G++...

错误:

  • [ze@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;

}

帮助.h

#ifndef HELP_H
#define HELP_H

class Help {
    public:
        Help();
        ~Help();
        void sayName();
    protected:
    private:
};

#endif // HELP_H

帮助.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;
}

【问题讨论】:

    标签: c++ g++ undefined-reference


    【解决方案1】:

    g++ main.cpp Help.cpp

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

    【讨论】:

      【解决方案2】:

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

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

      通过将其拆分为两行,您可以节省编译时间(对于较大的项目),因为您只能在 help.cpp 更改时编译它。 makeMakefile 用好会省去很多麻烦:

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

      【讨论】:

        【解决方案3】:

        我的 Linux Lubuntu 发行版也有同样的问题,它给我的构造函数和析构函数造成了问题,它无法识别它们。

        实际上,如果您只是将所有三个文件编译在一起,就会发生这种情况。因此,一旦您保存了所有文件,只需执行以下操作:

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

        ./a.out 是 Linux 的可执行文件,对不起,我不知道 Windows。并且您的程序会顺利运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-13
          • 2016-07-21
          • 2014-08-05
          • 1970-01-01
          • 2013-02-03
          • 1970-01-01
          • 2010-09-23
          相关资源
          最近更新 更多