VSCode IntelliSense 建议一个 .h 文件但将其标记为未找到

VSCode IntelliSense proposes a .h file but marks it not found

我无法使用 visual Studio 代码编译一个简单的愚蠢演示 "project"。

当我试图丰富我的知识组合时,我尝试手动学习基础知识,可以说我尝试手动编译代码,没有 Visual Studio Enterprise IDE 可以完成所有工作自动地。所以我决定使用 Visual Studio Code on Mac + clang++ 作为一个简单的演示项目。

我的问题是:我有一个工作区。在这个工作区中,我有一些目录。其中一个名为 Functions 和 Headers 的目录再次包含目录:debug、release、include、src。在 src 目录中,我有包含两个虚拟方法的 functions.cpp 文件:

int add(int x, int y)
{
    return x + y;
}

int subtract(int x, int y)
{
    return x - y;
}

并在 main.cpp 中:

#include "functions.h"

int main()
{
    int x = add(1, 3);
    int y = subtract(5,1);
    return 0;
}

在我的 include 文件夹中,我有两个方法声明:

int add(int x, int y);
int subtract(int x, int y); 

有趣的一点是:当我在 main.cpp 并键入 #include " 时,IntelliSense 会找到 functions.h 并向我推荐该文件。 此外,方法调用已正确突出显示。但是:包含文件后,Visual Studio 代码将文件标记为已读并说:functions.h 未找到文件。

那是 visual Studio 代码错误吗?因为我也看了设置,设置似乎没问题(见图)。

Clang 写道:

Ginos-MBP:src ginovalentinopensuni$ clang++ functions.cpp main.cpp main.cpp:2:10: fatal error: 'functions.h' file not found
#include "functions.h"
         ^~~~~~~~~~~~~ 1 error generated.

我是漏掉了什么还是做错了什么?我也在这里看了其他类似的问题,但没有任何帮助。

图片:

确实如此。 VSCode 包含允许 #include "functions.h" 自动完成的路径与编译器的有效路径无关。有两种方法可以解决这个问题:

修复源文件中的路径

由于您要从 ./src 目录中包含 header functions.h,请尝试改写:

#include "../include/functions.h"

int main()
{
    int x = add(1, 3);
    int y = subtract(5,1);
    return 0;
}

这应该有效。除非为编译器提供了特定的包含路径,否则 clang++ 与大多数其他 C++ 编译器一样,将解释相对于源文件位置的路径。在这种情况下,它需要上一个目录,然后进入 include 目录才能找到 functions.h header 文件。

clang++

添加包含路径

通过阅读 clang++ 手册页,可以确定 -I 标志可用于指定额外的包含路径,供编译器搜索以查找 header 文件.所以,假设命令是./目录下的运行,跳出src目录和项目根目录:

clang++ src/main.cpp -I./include

也会解决手头的问题。