1

我正在尝试将 OGDF C++ 库用于项目,并希望使用该库类的受保护成员函数。因为不能直接在类或派生类之外访问受保护的成员;为了使用 Balloon Layout 类的受保护方法,我创建了一个类 A,它继承 BallonLayout 类,并从 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);                
            }
};

int main()
{
    int n = 5, m = 7;
    Graph G;
    ogdf::planarBiconnectedGraph(G, n, m);

    A* a;
    a->abc(G);
    cout << "Done!!";
return 0;
}

它编译没有任何错误,但在运行时它给出“分段错误(核心转储)”。当我们尝试访问不在内存中的东西(对象/变量)时,就会出现这个错误。但不明白我犯了什么错误。

4

1 回答 1

0

你的代码:

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

不初始化指针a*使用or->运算符取消引用 null 或未初始化的指针是未定义的行为

事实证明,您根本不需要指针,只需使用:

A a;
a.abc(G);

如果您需要动态分配的内存,请包含<memory>并执行以下操作:

std::unique_ptr<A> a = new A(...);
a->abc(G);

为了对生命、宇宙和一切的热爱,尽可能不要使用裸指针。

于 2014-03-13T20:20:48.573 回答