2

Ich versuche, alle FunctionDecl-Knoten in einem Vektor zu speichern, damit ich sie in Zukunft besuchen kann. Der Anwendungsfall wäre für in Funktionen Schritt (zB Funktion eine Anrufe Funktion b, möchte ich in der Lage sein VisitDecl auf die Funktion b Knoten zu nennen)Decl-Knoten in Clang speichern AST

Speichern aller dieser Knoten im HandleTopLevelDecl innerhalb ASTConsumer fertig sind:

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); 
    } 
} 

jedoch während der Kompilierung ein Fehler vorhanden ist ‚~ Decl‘ ist ein geschütztes Mitglied von ‚klappern :: Decl‘

jemand etwas Licht in diese Schuppen können?

Antwort

1

Das Problem ist, dass Sie eine Kopie der Decl Instanz in Ihr Array einfügen. Das Erstellen und Löschen dieser Objekte liegt in der Verantwortung anderer Klassen. Daher können Sie nur auf eine Instanz verweisen.

ist hier die richtige Lösung für Ihr Problem:

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); 
    } 
} 
+0

Dank! Das löste das Problem des Hinzufügens zu einem Vektor. Nun muss ich nur noch überprüfen, ob ich den in den Vektoren gespeicherten Knoten besuchen kann. Prost. –