我是 C++ 新手,在分离头文件和实现文件方面存在问题,当我只使用实现文件或在头文件中包含函数定义时,它可以工作,但是如果我只在头文件中使用函数原型,那么我会得到错误“preLaunchTask 'C/C++: g++.exe build active file' 终止,退出代码 -1。”。
我一直在尝试不同的 launch.json 配置,但似乎没有任何效果,所以我迷失了,有人可以告诉我我在这里做错了什么吗?我制作了一组简化的文件来帮助隔离这个问题,它们是:
来自 basicInput.h(标题):
#include <iostream>
float inputPrompts(const std::string currentPrompt);
来自basicInput.cpp(实现):
#include "basicInput.h"
#include <iostream>
float inputPrompts(const std::string currentPrompt) {
float inputReturn;
std::cout << currentPrompt;
std::cin >> inputReturn;
return inputReturn;
}
来自main.cpp:
#include "basicInput.h"
#include <iostream>
int main() {
std::cout << inputPrompts("Enter a number: ");
return 0;
}
所有文件都在同一个文件夹中,编译器是g++。
我尝试在 Replit 中放入具有相同文件名的完全相同的代码,看看这是否只是我的编译器的问题,并且运行良好,所以我知道它必须与我的配置有关,我只是不知道问题到底是什么。我尝试过使用不同的 launch.json 配置来看看这是否是问题所在,但我尝试过的任何方法都不起作用,尽管常规的单文件源代码编译仍然很好。每次都没有生成 .exe 并且程序甚至没有开始运行,不知道是什么原因导致的。
来自tasks.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: cl.exe build active file",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/nologo",
"/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
"${workspaceFolder}/*.cpp"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$msCompile"
],
"group": "build",
"detail": "Task generated by Debugger."
},
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
首先查看你的tasks.json 文件
"label": "C/C++: g++.exe build active file",
"command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
这告诉 VSCode 从单个文件构建您的程序。特别是,它告诉 VSCode 从您当前在编辑器中处于活动状态的文件进行构建。显然,当您尝试从多个文件构建时,这不起作用。
它应该是这样的
"label": "C/C++: g++.exe build active file",
"command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"main.cpp",
"basicinput.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
查看如何明确提及这两个必需文件。