gpt4 book ai didi

c++ - 在 Clang AST 中存储 Decl 节点

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:03 25 4
gpt4 key购买 nike

我试图将所有 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' is a protected member of 'clang::Decl'

任何人都可以阐明这一点吗?

最佳答案

问题是您正在将 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);
}
}

关于c++ - 在 Clang AST 中存储 Decl 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37825848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com