簡體   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