我正在尝试将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)
后会出现此错误。
答案 0 :(得分:3)
A* a;
a->abc(G);
创建指针而不初始化它;然后尝试取消引用该无效指针来调用函数。结果是分段错误或其他未定义的行为。
您几乎肯定想要创建一个对象:
A a;
a.abc(G);