C++ 为什么可以';Intellisense在将头文件包含到命名空间中时是否从头文件中查找变量?

C++ 为什么可以';Intellisense在将头文件包含到命名空间中时是否从头文件中查找变量?,c++,intellisense,C++,Intellisense,首先,感谢你花时间阅读并回答这个问题 我想包括一个压缩字体,它已从.ttf文件转换为.h文件 压缩字体保存在以下类型的数组中(在.h文件中): static const unsigned int font\u name\u压缩数据[大约3-10000] 对于我正在使用的(ImGui),这一切都很好,我可以正确导入字体 问题是,当我想将那些font\u name\u compressed\u数据数组(每种字体一个)封装在名称空间中时,intellisense突然停止识别它们 它仍然可以很好地编译

首先,感谢你花时间阅读并回答这个问题

我想包括一个压缩字体,它已从
.ttf
文件转换为
.h
文件

压缩字体保存在以下类型的数组中(在
.h
文件中):

static const unsigned int font\u name\u压缩数据[大约3-10000]
对于我正在使用的(ImGui),这一切都很好,我可以正确导入字体

问题是,当我想将那些
font\u name\u compressed\u数据
数组(每种字体一个)封装在名称空间中时,intellisense突然停止识别它们

它仍然可以很好地编译,但intellisense不起作用,它不断地显示仍然存在错误


我正在使用c++17,尽管我认为这并不重要。 我使用Visual Studio 2019进行编译,同时使用Visual Studio代码进行编辑

是我第一次做错了还是这是intellisense的错误

~~E D I T:

我的假设是错误的,在手动打开每个
font\u name.hpp
文件并分别向其中添加名称空间后,intellisense又开始工作了。但在关闭并重新打开它之后,同样的错误又出现了。要么是这个

名称空间“字体”没有成员“roboto\u compressed\u data”

还是这个

名称后跟“::”必须是类或命名空间名称

似乎是随机的

如果我在Visual Studio 2019中自动完成
字体::
我将获得所有字体,但如果我在Visual Studio代码中执行相同操作,我将不会获得任何字体,除非我在Visual Studio代码中手动打开字体头文件并再次关闭它。 另外,在执行
重新扫描工作区
后,错误会返回

我认为我的项目设置正确,因为在使用名称空间或包含时,我在其他任何地方都不会出错

似乎VS代码只是从内存或其他地方卸载字体头文件,因为它相当长,但我不知道


当我这样做时,它不会被识别:

在压缩字体中

static const unsigned int font\u name\u compressed\u data[数组大小]=
{0x0000bc57、0x00000000、0x78b30000,…等等}
然后我想在其中使用它(.cpp):

名称空间字体\u数据
{
#包括“压缩字体.h”
}
// ...
//v---这是无法识别的
font\u数据::font\u名称\u压缩数据

但在我改变了一切之后,它又被认可了:

在压缩字体中

名称空间字体\u数据
{
静态常量无符号整数字体\u名称\u压缩\u数据[数组大小]=
{0x0000bc57、0x00000000、0x78b30000,…等等}
}
然后我想在其中使用它(.cpp):

#包括“compressed_font.h”
// ...
//v--这一点现在已被认可
font\u数据::font\u名称\u压缩数据

在更改后已经尝试了“重新扫描解决方案”命令?您的命名空间应该在头文件中。否则,很难确保每次都使用相同的名称空间,并且每次需要包含文件时都有代码重复。已经说过,智能感知不如实际编译器强大(本质上是一个简化的模型,在大多数情况下工作时,可以减少解析开销)@费德里克,是的,我也尝试重新安装VS代码的C++扩展,但没有改变。幸运的是,我发现它的工作原理与我描述的相反。我只是感到困惑,因为我认为两种方法都会产生相同的结果,尽管它不像Phil1970所描述的那样(至少不总是)。谢谢:)在更改后已经尝试了“重新扫描解决方案”命令?您的命名空间应该在头文件中。否则,很难确保每次都使用相同的名称空间,并且每次需要包含文件时都有代码重复。已经说过,智能感知不如实际编译器强大(本质上是一个简化的模型,在大多数情况下工作时,可以减少解析开销)@费德里克,是的,我也尝试重新安装VS代码的C++扩展,但没有改变。幸运的是,我发现它的工作原理与我描述的相反。我只是感到困惑,因为我认为两种方法都会产生相同的结果,尽管它不像Phil1970所描述的那样(至少不总是)。谢谢:)