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
也会解决手头的问题。
我无法使用 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
也会解决手头的问题。