繁体   English   中英

“未定义的引用”使用“g++”编译 C++ 程序

[英]"undefined reference to" using 'g++' to compile a C++ program

我似乎无法让错误消失。 错误如下。 我看过谷歌搜索,但我仍然无法弄清楚。 这不像我是 C++ 的新手,但我已经有一段时间没有玩弄它了。

奇怪的是它在 Windows 上与 g++ 一起工作......

使用错误:

g++ main.cpp

输出:

/tmp/ccJL2ZHE.o: 在函数main': \ main.cpp:(.text+0x11): undefined reference to
main.cpp:(.text+0x1d): 未定义引用Help::sayName()' \ main.cpp:(.text+0x2e): undefined reference to Help::~Help()'
main.cpp:(.text+0x46): undefined reference to `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;
}

利用

g++ main.cpp Help.cpp

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

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

我的 Linux Lubuntu发行版也有同样的问题,它给我的构造函数和析构函数带来了问题。 它没有认出他们。

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

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

./a.out是 Linux 的可执行文件。 抱歉,我不了解 Windows。 您的程序将运行顺利。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM