我试图将所有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);
}
}