我只是学习关于How to write RecursiveASTVisitor based ASTFrontendActions的clang工具。 我按照文档中的示例编译示例代码,总是出现一个错误。我不知道它为什么会出现这个错误以及如何解决它。我没有找到相关问题的解决方案。我不知道是谁遇到了同样的问题并解决了它。
/home/sun/project/clang-llvm/llvm/tools/clang/tools/extra/find-class-decls/FindClassDecls.cpp:44:31:错误:为'virtual clang ::指定的冲突返回类型:: ASTConsumer * FindNamedClassAction :: CreateASTConsumer(clang :: CompilerInstance&,llvm :: StringRef)' 在/home/sun/project/clang-llvm/llvm/tools/clang/tools/extra/find-class-decls/FindClassDecls.cpp:4:0中包含的文件中: /home/sun/project/clang-llvm/llvm/tools/clang/include/clang/Frontend/FrontendAction.h:64:40:错误:覆盖'virtual std :: unique_ptr clang :: FrontendAction :: CreateASTConsumer(clang: :CompilerInstance&,llvm :: StringRef)' 忍者:构建停止:子命令失败。
谢谢!
答案 0 :(得分:0)
从r215323开始,FrontendAction::CreateASTConsumer
被更改为返回std :: unique_ptr< clang :: ASTConsumer>代替。我已更新http://clang.llvm.org/docs/RAVFrontendAction.html上的文档以反映这一点。
答案 1 :(得分:0)
当我改为std :: unique_ptr时。同时,我继续返回新的FindNamedClassConsumer(& Compiler.getASTContext());不像你更新了文档"返回新的FindNamedClassConsumer;"。现在,当我编译FindClassDecls.cpp时,还有另一个错误。
/home/sun/project/clang-llvm/llvm/tools/clang/tools/extra/find-class-decls/FindClassDecls.cpp:46:64:错误:无法转换'((&(& ;编译器) - > clang :: CompilerInstance :: getASTContext()),(operator new(24ul),(((FindNamedClassConsumer *)) - > FindNamedClassConsumer :: FindNamedClassConsumer(),((FindNamedClassConsumer *))))) '从'FindNamedClassConsumer *'到'std :: unique_ptr'。
非常感谢!
答案 2 :(得分:0)
糟糕。我在剩下的时间里更新了文档。它本应该是:
class FindNamedClassAction : public clang::ASTFrontendAction {
public:
virtual std::unique_ptr<clang::ASTConsumer> CreateASTConsumer(
clang::CompilerInstance &Compiler, llvm::StringRef InFile) {
return std::unique_ptr<clang::ASTConsumer>(
new FindNamedClassConsumer(&Compiler.getASTContext()));
}
};