我正在尝试将 OGDF C++ 库用于项目,并希望使用该库类的受保护成员函数。我不能直接在类或派生类之外访问受保护的成员,因此为了使用 Balloon Layout 类的受保护方法,我创建了一个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)
当此方法调用超类的方法时,调用后会出现此错误。