在将代码划分为文件和文件夹时,遇到了包含.cpp和.h文件的问题。
有一个文件树:
1 个字符串(项目文件夹)
1.1 .vscode(vs代码文件夹)
1.1.1 设置.json
1.1.2 任务.json
1.2 headers(包含头文件的文件夹)
1.2.1 字符串.h
1.3 source(有资源文件的文件夹)
1.4 main.cpp(程序入口文件)
String.h 包含 String 类的声明,String.cpp 包含其实现。Main.cpp 通过头文件调用来调用 String 类及其几个方法。
主程序
#include"headers/String.h"
int main()
{
String str("lorem");
str.Print();
return 0;
}
字符串.h
#pragma once
class String
{
private:
char* str;
public:
String();
~String();
void Print();
//...
}
字符串.cpp
#include<String\headers\String.h>
#include<iostream>
String::String(){
//...
}
String::~String(){
//...
}
void String::Print(){
//...
}
我必须将 String.cpp 参数添加到tasks.json,以便编译器能够看到它。
任务.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe сборка активного файла",
"command": "C:\\msys64\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}","${fileDirname}\\source\\String.cpp",//здесь
"-I",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Задача создана отладчиком."
}
],
"version": "2.0.0"
}
结果 String.cpp 中出现错误
fatal error: String\headers\String.h: No such file or directory
2 | #include"String\headers\String.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
老实说,我不明白为什么会发生这种情况,也许这个错误比我想象的要简单得多。
预先感谢您的回答!

该项目没有路径“String\headers\String.h”。或者“String/headers/String.h”
使用 g++ 时
#include "String\\headers\\String.h"会产生以下结果.cpp(仅适用于include带引号的文件夹)。-I。-iquote(仅适用于include带引号的文件夹)。-isystem或系统文件夹中进行的。headers/String.h当编译 main.cpp 或../headers/String.hString.cpp时,文件的实际位置位于此处。该指令强制您在系统文件夹和用 指定的文件夹中
#include <String\headers\String.h>搜索子路径。String\headers\String.h-I为了使“String\headers\String.h”正常工作,必须使用 -iquote 设置包含项目文件夹的文件夹的路径。这很不方便 - Visual Studio 不喜欢带有两个点的路径超出项目文件夹。
使用“headers\String.h”和-I开关更容易,指向项目的根目录,但这有依赖开发环境的缺点。例如,使用 CMake,您通常可以仅使用文件名,并将所有文件夹的列表添加到列表中。
一种可移植的、独立于工具的方法是使用真实的相对路径(见上文)。