繁体   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