Не могу понять в чем ошибка при наследовании, компилятор пишет, что не определен базовый класс, хотя все заголовки и определение класса я сделал. Вот полный текст ошибки: 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);
};
Как сказано в комментариях, у вас циклическая зависимость в #include. Проблема в том, что базовый класс у вас дружествен к наследнику. Это явная ошибка инкапсуляции. Все поля Node, которые могут понадобиться List, должны быть public или protected. node.h не должен инклюдить list.h. Вообще про него знать ничего не должен.
Продвижение своими сайтами как стратегия роста и независимости