在 Visual Studio Code 中编译多个文件导致错误

问题描述

我对 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 中)

附言我也是堆栈溢出的新手,所以您对我的任何建议都会很棒。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...