使用'g++'编译C++程序时出现"undefined reference to"错误

7

我似乎无法让这些错误消失。以下是错误信息。我已经在谷歌搜索上查找过了,但仍然无法弄清楚。虽然我不是C++的新手,但我已经有一段时间没有使用它了。

奇怪的是,在Windows上使用g ++可以正常工作...

使用时出现错误:

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;
}

“奇怪的是,在Windows上使用g++可以工作…”:这是在哪个平台上尝试的?它以前在Windows上工作过,但现在在Windows上不起作用了吗?还是在其他地方尝试过,比如Linux?命令提示符表明这可能是在Windows上的Git BashCygwin,或者可能是在Linux上。 - Peter Mortensen
好的,OP已经离开了:“上次出现是8年前”。我们可能永远不会知道。另一个问题在4个月前提出,表明首选平台可能是Windows。 - Peter Mortensen
3个回答

15

使用

g++ main.cpp Help.cpp

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


8
您应该在g++行中加入help.o:
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

我在使用 Lubuntu Linux 发行版时遇到了同样的问题,这给我的构造函数和析构函数带来了问题。它无法识别它们。

实际上,只要将所有三个文件一起编译,就可以解决这个问题。因此,一旦保存了所有文件,只需要执行以下操作:

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

./a.out 是 Linux 的可执行文件。抱歉,我不了解 Windows。但是你的程序应该可以顺利运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接