2

私は将来、それらを訪問できるように、すべてのFunctionDeclノードをベクターに格納しようとしています。これらすべてのノードがASTConsumer内HandleTopLevelDeclで行われているのユースケースは、関数へのステッピングのために(例えば、私は関数bノード上VisitDeclを呼び出すことができるようにしたい、呼び出し関数bを機能さ)でしょうClang ASTの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); 
    } 
} 

しかし、コンパイル時にエラー「〜供述は」

誰もがこの上でいくつかの光を当てることができます「打ち鳴らす::供述」は保護されたメンバーが存在しているのですか?

答えて

1

問題は、アレイに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); 
    } 
} 
+0

ありがとう!それはそれをベクトルに追加するという問題を解決しました。今は、ベクトル内に格納されたノードにアクセスできるかどうかを確認するだけです。乾杯。 –

関連する問題