プロジェクトに OGDF C++ ライブラリを使用しようとしていますが、このライブラリのクラスの保護されたメンバー関数を使用したいと考えています。A
クラスまたは派生クラスの外部で保護されたメンバーに直接アクセスできないため、バルーン レイアウト クラスの保護されたメソッドを使用するために、から継承するクラスを作成しましたBallonLayout
。からA
、スーパー クラスの保護された関数abc()
がクラス のパブリック関数で呼び出されA
ます。abc()
クラス外で間接的に保護されたクラスの関数を使用できるようにしBallonLayout
ます。
これがコードです。どこに問題があるか教えてください。
#include <ogdf/basic/Graph.h>
#include <ogdf/basic/graph_generators.h>
#include <ogdf/misclayout/BalloonLayout.h>
using namespace ogdf;
class OGDF_EXPORT A : public BalloonLayout{
public:
void abc(const Graph &G){
selectRoot(G); //Calling super class protected method.
}
};
int main()
{
int n = 5, m = 7;
Graph G;
ogdf::planarBiconnectedGraph(G, n, m);
A* a = new A;
a->abc(G);
cout << "Done!!";
return 0;
}
エラーなしでコンパイルされますが、実行時に「セグメンテーション エラー (コア ダンプ)」が発生します。このエラーは、メモリにないもの (オブジェクト/変数) にアクセスしようとすると発生します。しかし、私は自分がした間違いを理解していません。
の代わりにA* a = new A; a->abc(G);
、次のことも試しましたが、同じエラーが発生しています。
A* a;
a->abc(G);
と
A *a = new A;
a->abc(G);
delete a;
と
A a;
a.abc(G);
上記の試みのそれぞれに対して、セグメンテーション違反が発生します。このエラーはa.abc(G)
、このメソッドがスーパークラスのメソッドを呼び出すときに呼び出した後に発生します。