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

时间:2011-08-08 05:57:08

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

似乎无法让错误消失。错误如下。我已经看过谷歌仍然无法搞清楚。这不像我是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;
}

3 个答案:

答案 0 :(得分:15)

g ++ main.cpp Help.cpp

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

答案 1 :(得分:8)

您应该将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

答案 2 :(得分:0)

我的Linux Lubuntu发行版遇到了同样的问题,它正在为我的构造函数destructor造成问题,它无法识别它们。

实际上,如果您只是将所有三个文件一起编译,则此操作将不可用。因此,一旦保存了所有文件,请执行以下操作:

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

./ a.out是Linux的可执行文件,抱歉,我不知道Windows。这样您的程序就可以顺利运行。