gpt4 book ai didi

c++ - 在 VSCode 中编译 C++ 给我一个 undefined reference

转载 作者:行者123 更新时间:2023-12-05 03:56:22 24 4
gpt4 key购买 nike

通常我使用 VS19 进行 C++ 编程,但我想尝试它是否适用于我的 Macbook 上的 VSCode,所以我写了一个真正简单的程序:

主要

#include <iostream>
#include "test.hpp"
using namespace std;

int main()
{
testfile obj(5);
cout << "main.cpp" << endl;
obj.output();
return 0;
}

类头(.hpp)

#pragma once
using namespace std;

class testfile
{
private:
int i;
public:
testfile(int in) : i(in) {}
void output();
};

类文件(.cpp)

#include "test.hpp"
#include <iostream>
using namespace std;

void testfile::output()
{
cout << i << endl;
}

我知道我可以在标题中写入少量输出,但我想尝试一下,如果代码被拆分成许多不同的文件,它是否有效。我收到以下错误:

(PATH)..\Temp\ccITg6NM.o:main.cpp:(.text+0x48): undefined reference to `testfile::output()' collect2.exe: error: ld returned 1 exit status

我的 Windows 笔记本电脑也是如此。我在 Visual Studio 上运行了完全相同的代码,它运行得非常好。我试着用谷歌搜索这个错误,但老实说,我没有从中得到任何结果......

我使用 C/C++ 智能感知和编译运行插件运行 VSCode。

最佳答案

这很棘手...我不确定,但链接器可能会忽略 test.cpptestfile::output() 的实现,因为 header test.hpp 包含构造函数 testfile::testfile(int in) 的实现。

我实际上无法重现问题,试试这个:

测试.hpp

#pragma once
using namespace std;

class testfile
{
private:
int i;
public:
testfile(int in);
void output();
};

测试.cpp

#include "test.hpp"
#include <iostream>
using namespace std;

testfile::testfile(int in) : i(in) {}

void testfile::output()
{
cout << i << endl;
}

我认为所有的实现都像上面那样放在 *.cpp 文件中会更好。


编辑:

我使用 g++ 编译这些文件(很抱歉我没有 VScode 环境)。

命令行(正确): g++ main.cpp test.cpp -o 输出

输出:

D:\workspace\test2\test2>out
main.cpp
5

命令行(不正确,缺少test.cpp): g++ main.cpp -o 输出

输出:

${User}\AppData\Local\Temp\ccYKJ92L.o:main.cpp:(.text+0x1a): undefined reference to `testfile::testfile(int)'
${User}\AppData\Local\Temp\ccYKJ92L.o:main.cpp:(.text+0x48): undefined reference to `testfile::output()'
collect2.exe: error: ld returned 1 exit status

命令行(不正确,缺少 main.cpp): g++ test.cpp -o 输出

输出:

C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x2e): undefined reference to `WinMain'
collect2.exe: error: ld returned 1 exit status

编辑2:

虽然我使用的是 Windows,但我安装了 VSCode,我想我明白了为什么会出现这些类型的错误。

您可以使用 F6 命令构建带有 C/C++ 编译运行的源代码,但是 F6 命令仅适用于当前选择并显示的文件在编辑器上。你选择 main.cpp 然后链接器找不到 class testfile 的方法,否则选择 test.cpp 然后链接器找不到项目的入口点(main)。

所以如果你想正确构建,你必须制作某种构建脚本(makefile、json 等)。

如果你输入Ctrl+Shift+P,你可以进入Tasks: Configure task选项卡。单击它们并配置您的设置(主机操作系统、编译器等),它会为您提供最小形式的默认 tasks.json 文件。

我使用这个 json 文件(Windows,mingw(gcc for windows))

tasks.json

{
"version": "2.0.0",
"command": "g++",
// compiles and links with debugger information
"args": ["-g", "-o", "out.exe", "main.cpp", "test.cpp"],
}

Ctrl+Shift+B(使用上面的 json 构建),然后它的输出:

running command> g++ -g -o out.exe main.cpp test.cpp

成功构建out.exe文件。

如果要调试或运行,使用F5Ctrl+F5或顶部菜单栏上的Debug选项卡,然后它的输出在调试控制台上:

main.cpp
5

调试或运行步骤引用 launch.json 文件,如构建步骤引用 tasks.json 文件。

供引用,launch.json:

{
"version": "0.2.0",
"configurations": [
{
"name": "(Windows)build test",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/out.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false
}
]
}

结论是不是源码的问题。有关更多信息,请参阅这篇文章:

How do I set up Visual Studio Code to compile C++ code?

关于c++ - 在 VSCode 中编译 C++ 给我一个 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59370455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com