Ошибка: “Не определен базовый класс”

154
01 февраля 2020, 00:10

Не могу понять в чем ошибка при наследовании, компилятор пишет, что не определен базовый класс, хотя все заголовки и определение класса я сделал. Вот полный текст ошибки: C2504 Node: не определен базовый класс.

list.h:

#pragma once
#include "node.h"
#include <iostream>
class Node;
class List : public Node {
friend std::ostream& operator<<(std::ostream& out, const List& list);
private:
    Node* head;
    Node* tail;
    Node* curr;
    char min;
    size_t size;
public:
    void push(char value);
    void update();
    Node* remove(Node* node = nullptr);
    Node* getCurr() const;
    Node* getTail() const;
    Node* getHead() const;
    Node* operator++();
    Node* operator--();
    List();
    ~List();
};

node.h:

#pragma once
#include "list.h"
#include <iostream>
class List;
class Node {
    friend List;
    friend std::ostream& operator<<(std::ostream& out, const List& list);
private:
    char value;
    Node* next;
    Node* prev;
protected:
    Node* insert(Node* node);
    Node* excluse();
    explicit Node(char value = 0);
    ~Node() = default;
public:
    char getValue() const;
    void setValue(char value);
};
Answer 1

Как сказано в комментариях, у вас циклическая зависимость в #include. Проблема в том, что базовый класс у вас дружествен к наследнику. Это явная ошибка инкапсуляции. Все поля Node, которые могут понадобиться List, должны быть public или protected. node.h не должен инклюдить list.h. Вообще про него знать ничего не должен.

READ ALSO
Реальные достоинства Java [закрыт]

Реальные достоинства Java [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав...

164
Как запросить и обработать таблицу

Как запросить и обработать таблицу

Начал изучать http только и хочется разобраться, можно ли своё расписание запилить с запросами к базе данных универаЕсть сайт университета,...

159
Could not find a driver for automationName &#39;Appium&#39; and platformName &#39;Android&#39;

Could not find a driver for automationName 'Appium' and platformName 'Android'

Я - новичок в автоматизации мобильных приложенийПомогите, пожалуйста, разобраться с возникшей ошибкой:

150