编译Clang工具时出错RecursiveASTVisitor:错误:冲突返回类型CreateASTConsumer

时间:2014-10-20 19:47:16

标签: clang abstract-syntax-tree

我只是学习关于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)' 忍者:构建停止:子命令失败。

谢谢!

3 个答案:

答案 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()));
  }
};