Я пытаюсь сохранить все узлы FunctionDecl в векторе, чтобы я мог посетить их в будущем. Вариант использования для входа в функции (например, функция вызывает функцию b, я хочу иметь возможность вызывать VisitDecl на узле функции b)
Хранение всех этих узлов выполняется в HandleTopLevelDecl в ASTConsumer:
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».
Кто-нибудь может пролить свет на это?
Проблема в том, что вы кладете копию 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);
}
}
Других решений пока нет …