1

我正在尝试将 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)当此方法调用超类的方法时,调用后会出现此错误。

4

1 回答 1

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

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

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

A a;
a.abc(G);
于 2014-03-13T13:00:07.617 回答