首页 文章

G Cpp中的“未定义引用”

提问于
浏览
7

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

Weird thing is it worked with G++ in Windows...

错误:

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

}

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 回答

  • 8

    g main.cpp Help.cpp

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

  • 15

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

    我的Linux Lubuntu发行版遇到了同样的问题,它为我的构造函数,析构函数创建了问题,它没有识别它们 .

    实际上,如果你只是 compile all of the three files together. ,这就会消失 . 所以,一旦你保存了所有文件,就这样做:

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

    ./a.out是Linux的可执行文件,抱歉,但我不知道Windows . 而且你的程序会顺利运行 .

相关问题