存储在clang ast中的声明节点
Storing Decl nodes in Clang AST
我正在尝试将所有函数decl节点存储在向量中,以便将来可以访问它们。用例将用于逐步介入函数(例如函数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);
}
}
但是,在汇编期间,有一个错误'〜eclect'是" clang :: exly'
的受保护成员任何人都可以阐明吗?
问题是您将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);
}
}
相关文章:
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 链表中头/第一个节点的声明
- 使用括号会在声明新节点时会产生错误
- 在声明节点创建链接列表时,为什么静态内存分配不起作用
- 存储在clang ast中的声明节点
- 声明新节点但不等于 NULL
- 节点数组声明
- 在C++中声明节点时,何时需要使用新运算符
- 以私有方式声明的节点
- List Traversal w/temp指针-在声明指针时分配指针引用的节点空间有危险
- 为什么将链表的第一个节点声明为指针
- 列表节点指针"未在此范围内声明"?