macOS下coc-clangd无法识别C++标准库方法及头文件相关问题求助
macOS下coc-clangd无法识别C++标准库方法及头文件相关问题求助
各位大佬好!我在macOS上用coc-clangd插件写C++代码时碰上个棘手的问题,折腾半天没搞定,来这儿求支招了😭
我写的测试代码如下:
#include<iostream> #include<functional> using namespace std; int main(){ function<bool()> fn; }
检测代码时出现了两个主要问题:
- 编译错误,连标准库模板都认不出:
No template named 'function' (clang no_template)
而且iostream和functional这些基础标准库头文件也被提示有异常,就像clangd完全找不到它们似的。
2. 还有一个警告提示:
Included header functional is not used directly (fix available) (clangd unused-includes)
我试着去调整C++头文件的路径配置,但还是没解决问题,有没有过来人能给我指条明路呀?
给你整理几个可能有用的解决方向
- 先把C++标准版本配置正确:
std::function是C11才加入标准库的特性,macOS自带的clang默认可能用的是老旧的C98标准,肯定认不出这个模板。你得给clangd指定新一点的标准,比如在coc的配置文件(Neovim是~/.config/nvim/coc-settings.json,Vim是~/.vim/coc-settings.json)里添加这段配置:
选C17是因为它的兼容性和新特性平衡得比较好,你也可以换成C11、C14或者C20,看自己的需求来。"clangd.args": [ "-std=c++17", "--gcc-toolchain=/Library/Developer/CommandLineTools/usr" ] - 检查Xcode命令行工具是否安装完整:macOS的C++标准库头文件都在Xcode Command Line Tools里,要是这个工具没装或者版本太旧,clangd肯定找不到头文件。你打开终端输入
xcode-select --install,跟着提示完成安装或更新,之后重启coc-clangd试试。 - 未使用头文件的警告很好解决:clangd报这个警告,是因为你只声明了
fn变量但完全没用到它,它就觉得functional头文件是多余的。你要么给fn加个简单的使用逻辑,比如fn = [](){ return true; };,要是只是单纯测试的话,也可以给clangd加个参数-Wno-unused-includes来忽略这个警告。 - 别忘了重启插件生效:修改完配置之后,一定要重启coc-clangd才会生效,在Vim/Neovim里输入
:CocRestart就行,重启完再看代码检测结果。
备注:内容来源于stack exchange,提问作者user24168305
相关产品推荐
相关产品推荐

