Emacs - ccls: 在命名空间 "std" 中没有名为 "filesystem" 的成员

6

使用以下设置,作为C ++ IDE的Archlinux用户,使用Emacs:company / flycheck / lsp-ui / ccls

我正在尝试为个人使用使用c++17的filesystem库,但我无法在Emacs中摆脱这个错误

ccls:名称空间'std'中没有名为'filesystem'的成员

我的问题快速样本

#include <iostream>
#include <filesystem>

int main(int argc, char** argv) {
   std::filesystem::path filePath("./sample.cpp");
   std::cout << filePath.filename() < std::endl;
   return 0;
}

使用以下命令编译和运行是完全没问题的:

clang++ -std=c++17 sample.cpp

输出:"sample.cpp"

但在Emacs中仍然存在所谓的“错误”,这有点烦人。我尝试添加 .ccls 文件并使用以下内容,但这并没有解决问题。

clang++
%cpp -std=c++17        ; Also tried with gnu++17

这是一个问题截图。我猜coutfilePath的错误是第一个错误的结果,因为总体来说一切都很好。是否有人知道如何解决这个问题?截图

对我来说,你的.ccls文件有效。如果你检查一下缓冲区*ccls::stderr*,你是否看到了一行像这样的内容:22:14:20 ccls project.cc:284 I use /home/geza/st/.ccls: clang++ %cpp -std=c++17?顺便说一句,你可以尝试使用compile_commands.json的方式,它很容易使用,只要你使用bear来生成它。 - geza
似乎ccls::stderr缓冲区没有输出。 我找到的唯一信息是在错误出现之前的这个日志 clang failed with error 1: /usr/bin/clang -fsyntax-only -Xclang -code-completion-macros -x c++ -Xclang -code-completion-at=-:8:6 -我尝试使用bear和我正在使用的makefile生成compile_commands.json文件,但它并没有解决问题。 - Cerclique
它无法解决compile_commands.json文件的问题。我的错。 - Cerclique
1
这个有什么更新吗? - Tooniis
我们确实需要对这个进行更新。 - Dragster
显示剩余2条评论
1个回答

2

我遇到了与你面临的问题类似的情况,使用 nvim + Ale + LanguageClient-neovim。我成功地使用 clang++ 和 -std=c++20 标志编译了我的代码。然而,我无法摆脱在 nvim 中显示找不到导入成员的错误消息。我甚至构建了我的 .ccls 文件,但问题没有解决。

后来,我意识到虽然我已经配置了 LanguageClient,但我忽视了配置我的 linter(Ale)。因此,值得检查一下你的 linter 是否也设置为使用 c++20。希望这个建议对你有帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接