簡體   English   中英

C++ 無法編譯簡單的類頭(鏈接器命令失敗,退出代碼為 1)

[英]C++ Can't compile simple class header (linker command failed with exit code 1)

問題似乎出在我使用的編譯器上,盡管我對編程還很陌生,所以我不確定如何解決這個問題(我在 Mac OSX 上使用 VSCode)

這是我的標題:

#ifndef STICKMAN_H
#define STICKMAN_H

class Stickman{
public:
Stickman();
};
#endif

這是我的源文件:

#include "stickman.h"
#include <iostream>

using namespace std;

Stickman::Stickman(){
    cout << "Hello\n";
}

這是我的主要內容:

#include "stickman.h"
#include <iostream>

int main(){
   Stickman figure;
}

這是終端中的錯誤消息:

Alexandres-MBP:Game alexandrecarqueja$ cd
"/Users/alexandrecarqueja/Desktop/Game/" && g++ main.cpp -o main && "/Users/alexandrecarqueja/Desktop/Game/"main
Undefined symbols for architecture x86_64:
"Stickman::Stickman()", referenced from:
 _main in main-d38641.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

您需要改為調用它:

g++ main.cpp stickman.cpp -o main

這也將編譯stickman.cpp 然后鏈接器將知道該怎么做。 現在你的 main 中有一個#include stickman.h ,它聲明了這個類,但沒有定義它。

鏈接器看到聲明了一個構造函數(在stickman.h ),但沒有看到它是如何實現的( stickman.cpp沒有被編譯)。 因此它無法與構造函數體鏈接。

它必須是特定於編譯器的,因為我在 Visual Studio 中運行了代碼並成功構建了它。 如果您碰巧有一台 Windows 計算機,我建議您獲得免費的 express/community Visual Studio 2017 IDE 軟件。 代碼看起來不錯,所以我個人不確定是什么導致了你的問題,如果它與編譯器無關。 如果您只有一台 Mac 計算機,那么我建議您可以查看其他免費編譯器。

如果您的項目的路徑包含空格,您也會在 vscode 中收到此錯誤。 如上所述,您還需要編譯所有 cpp 文件。

要在例如 macOS Catalina 中的 vscode 中執行此操作,請在此處查看我的答案https://stackoverflow.com/a/61331301/1071899

基本上你需要用編譯器特定的標志制作一個 tasks.json 文件。 在這里,您需要包含應編譯所有 *.cpp 文件,並且您需要通過添加"\\"${workspaceFolder}\\"/*.cpp",而不是"${file}",來轉義空格。 注意兩個\\" 。這將確保您的項目路徑被""包圍,並且不會抱怨鏈接器錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM