Я пишу какой-то проект, используя Qt Creator.
Я создал интерфейс для различных реализаций графов, которые на его основе. Время от времени я добавляю методы в этот файл Graph.h , поэтому я забыл один раз отметить один метод pure . Это привело к ошибке «Неопределенная ссылка на 'vtable for Graph'» , о которой я много читал и имею некоторое представление о файлах MO C. Но ни один вариант не помог мне решить мою проблему, поэтому я решил скопировать старую версию своего проекта (которая отлично работала) и сравнить ее с текущей. Сделав это, я заметил, что одна из функций в Graph.h не помечена как pure .
Итак, мой вопрос: Почему не пометка метода как чистого вызвала ошибку mo c?
Вот код:
График интерфейса .h
class Graph {
public:
Graph() = default;
virtual ~Graph() = default;
/* some other stuff here */
[[nodiscard]] virtual std::vector<int> topologicalSort() const; //this function was forgotten to be marked pure
};
MGraph.h
#include "Graph.h"
class MGraph : Graph
{
private:
/* some stuff here */
public:
MGraph();
explicit MGraph(int nodes, int edges = 0, bool directed = false, bool weighted = false);
explicit MGraph(const LGraph& lGraph);
~MGraph();
/* some stuff here */
[[nodiscard]] std::vector<int> topologicalSort() const override;
};
"Неопределенная ссылка на 'vtable for Graph'" ошибка была направлена в конструктор и деструктор Graph.