问题描述
我对 C++ 编码比较陌生,已经开始使用主文件和头文件,我已经创建了一个程序来测试它,但是,以下程序导致以下编译器错误:
Undefined symbols for architecture x86_64:
"Print()",referenced from:
_main in test-7d0225.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
这是我当前的代码。
test.cpp
#include <iostream>
#include "test.h"
using namespace std;
int main() {
Print();
return 0;
}
test.h
#ifndef TEST_H
#define TEST_H
void Print();
#endif
test1.cpp
#include <iostream>
#include "test.h"
using namespace std;
void Print() {
cout << "Hello" << endl;
}
我在网上找到的任何东西都没有帮助我,我唯一的假设是我的编译器设置不正确。我也尝试通过键入“g++ test.cpp test1.cpp”来编译这两个文件,但产生了类似的结果。我想指出的是,我也在 Mac 上。请随时对我如何提出这个问题提出任何意见或建议,这是我第一次讨论堆栈溢出。
解决方法
你的代码看起来不错,我会尝试自己在vscode上编译它。 一个问题可能是你的 vscode launch.json。我遇到了与我所描述的相同的问题。对于像 c 和 c++ 这样的低级语言,Vscode 可能非常“挑剔”。在您的启动文件(或任务文件,如果它调用任务中的某些内容)中,请确保编译文件夹中的 *.cpp 文件。我会看起来像 {folder}/**.cpp。要找到确切的命令,请查看 vscode 的官方网站。
鉴于您尝试在 vscode 之外编译代码并假设所有内容都在同一文件夹中,这可能是编码问题。同样,您的代码看起来不错。上网找一些学习用多文件编码编写网站的方法。复制他们的代码并执行与您的代码相同的操作。如果它不起作用,则肯定是如何编译代码有问题。否则请修改您的代码并进行比较以找到问题。
另外,您能否提供终端命令 vscode 打印(我也在 Mac 上)。它将在 g++ 部分的终端选项卡中,而不是在 bash 中)
附言我也是堆栈溢出的新手,所以您对我的任何建议都会很棒。