Я пытаюсь использовать библиотеку 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)
когда этот метод вызывает метод суперкласса.
A* a;
a->abc(G);
Это создает указатель без его инициализации; затем пытается разыменовать этот неверный указатель для вызова функции. Результатом является ошибка сегментации или другое неопределенное поведение.
Вы почти наверняка хотите создать объект:
A a;
a.abc(G);
Других решений пока нет …