我正在尝试为一个项目使用OGDF C++库,并且希望使用这个库的一个类的受保护的成员函数。我不能直接在类或派生类外部访问受保护的成员,所以为了使用气球布局类的受保护方法,我创建了一个继承自BallonLayout的类A。在A中,在类A的公共函数abc()中调用超类的受保护函数;这样我就可以在类外部使用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)之后会出现此错误。
发布于 2014-03-13 21:00:08
A* a;
a->abc(G);这会在没有初始化指针的情况下创建一个指针;然后尝试取消对该无效指针的引用以调用函数。结果是分段错误或其他未定义的行为。
您几乎肯定想要创建一个对象:
A a;
a.abc(G);https://stackoverflow.com/questions/22379375
复制相似问题