Почему ошибка mo c вызвана не чистым методом? - PullRequest
0 голосов
/ 30 мая 2020

Я пишу какой-то проект, используя 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...