我试图将所有FunctionDecl节点存储在 vector 中,以便将来可以访问它们。用例可用于进入函数(例如,函数a调用函数b,我希望能够在函数b节点上调用VisitDecl)

所有这些节点的存储都在ASTConsumer的HandleTopLevelDecl中完成:

std::vector<Decl> vec;

virtual bool HandleTopLevelDecl (DeclGroupRef DG) {
  for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
    Decl *D = *i;
    vec.push_back(*D);
  }
}

但是,在编译过程中会出现错误“〜Decl”是“clang::Decl”的 protected 成员

任何人都可以对此有所了解吗?

最佳答案

问题是您要将Decl实例的副本放入数组中。这些对象的创建和删除是其他类的责任,因此您只能引用一个实例。

这是解决您问题的合适方法:

std::vector<Decl *> vec;

virtual bool HandleTopLevelDecl (DeclGroupRef DG) {
  for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
    Decl *D = *i;
    vec.push_back(D);
  }
}

10-08 06:04