在派生类中访问受保护的成员函数 - 分段错误

时间:2014-03-13 12:58:07

标签: c++ ogdf

我正在尝试将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)后会出现此错误。

1 个答案:

答案 0 :(得分:3)

A* a;
a->abc(G);

创建指针而不初始化它;然后尝试取消引用该无效指针来调用函数。结果是分段错误或其他未定义的行为。

您几乎肯定想要创建一个对象:

A a;
a.abc(G);