我刚开始写Win32应用程序,我在Neovim中编辑,我运行WSL,使用clangd作为LSP,编译时我使用Microsoft cl,它构建二进制文件很好。
我正在重构一些代码,当我把我的#include <dsound.h>
从它原来的main.cpp移动到一个新的头文件(windows_sound. h)时,我遇到了一个奇怪的LSP错误。clang:在包含的文件中:未知类型名称“interface”。
这个错误即使是文件中唯一的东西(没有include guards)也会出现。但是,如果我把include移到一个空的.cpp(windows_sound. cpp)中,LSP不会给我任何错误。知道发生了什么吗?
My .clangd(指向MingW64的Windows头文件):
CompileFlags:
Add:
- "--target=x86_64-w64-windows-gnu"
- "-std=c++20"
- "-fms-extensions"
- "Wall"
- "-isystem/usr/share/mingw-w64/include/"
我的经典版本:15.0.6
nvim版本:0.8.0-1210
我在配置中做的唯一附加操作是将clangd命令修改为:
cmd =
{
"clangd",
"--header-insertion=never",
},
1条答案
按热度按时间nxowjjhe1#
错误发生在
.h
中,但未发生在.cpp
文件中,这可能表明clangd将.h
文件视为C头文件,而不是C头文件。一种解决方案是将头文件重命名为
.hpp
,这将其标识为C头文件。另一个解决方案是指示clangd将项目中的
.h
文件解析为C++头文件,方法是将以下代码添加到项目根目录中的.clangd
file:Clangd确实有一些启发式的方法来将
.h
文件归类为C++,例如,如果有一个文件具有相同的名称,但旁边有.cpp
扩展名,它会将.h
文件视为C++。plans可以扩展此启发式,以考虑项目中的实际包含关系(即,如果项目中的任何.cpp
文件包含.h
文件,则将其视为C++),但在此之前,可能需要上述两种解决方法之一。