Доступ к защищенной функции-члену в производном классе — ошибка сегментации

Я пытаюсь использовать библиотеку 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) когда этот метод вызывает метод суперкласса.

0

Решение

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

Это создает указатель без его инициализации; затем пытается разыменовать этот неверный указатель для вызова функции. Результатом является ошибка сегментации или другое неопределенное поведение.

Вы почти наверняка хотите создать объект:

A a;
a.abc(G);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]