Реально ли так наследоваться?

121
13 декабря 2020, 13:10

Возможно ли так наследоваться? У меня просто ошибки выскакивают:

class Human:public Node<Human>; //Здесь unknown template name 'Node' и expected '{' after base class list
template <class T>
class Node{
private:
    T data;
    QList<Node<T>*> childs;
    QList<Node<T>*> parents;
public:
    Node(){
        qDebug( "Node construct" );
    };
    Node(T* newdata){
        qDebug( "Node construct" );
        data = *newdata;
    };
    T get_data(){ return data; }
    void set_data(T new_data){data=new_data;}
    void add_child(T* child){ childs.push_back(new Node(child));}
    void add_parent(T* parent){parents.push_back(new Node(parent));}
    QList<Node<T>*>* get_childs(){return &childs;}
    QList<Node<T>*>* get_parents(){return &parents;}
    ~Node(){
    }
};
class Human:public Node<Human>{ // А здесь redefinition of 'Human'
private:
    int id;
    Node<Human> *node = new Node<Human>();
    Photo avatar;
    QString firstname;
    QString lastname;
    QString description;
    Gallery gallery;
    QList<Event*> events;
public:
    Human(){}
    Human(QString firstname,QString lastname,QString description):firstname(firstname),lastname(lastname),description(description){};
    QString get_firstname();
    QString get_lastname();
    Photo get_avatar();
    QList<Event *> get_events();
    Gallery get_gallery();
    void change_firstname(QString);
    void change_lastname(QString);
    void change_description(QString);
    void add_child(Human*);
    void add_parent(Human*);
    QList<Node<Human> *> *get_childs();
    QList<Node<Human> *> *get_parents();
};
Answer 1

У вас в коде наблюдается циркулярная вложенность пообъектов. Класс Human включает в себя Node<Human> в качестве базового подобъекта, а Node<Human> включает в себя Human в качестве подобъекта data. Это, разумеется, невозможно.

Как вы тут ни крутитесь, вы будете всегда упираться в попытку объявления объекта неполного типа в контексте, где неполный тип использовать не разрешается, или в невозможность дедукции типа или еще во что-то в этом роде.

READ ALSO
Как проверить является ли строка числом, если она содержит русские символы?

Как проверить является ли строка числом, если она содержит русские символы?

Написал функцию, которая проверяет каждый символ строки до тех пор, пока не встретит не цифру или терминирующий нольЕсли встречается не цифра,...

90
Что делает эта функция (SwapEnd)?

Что делает эта функция (SwapEnd)?

Столкнулся со следующей функцией, автор использует её при записи в данных вvtk файл

121
Связанные select2 from to

Связанные select2 from to

Есть 2 связанных списка select со значениями от и до, реализованные с помощью select2:

108
функция не передается в $(window).resize()

функция не передается в $(window).resize()

Подскажите что я делаю неправильно и в чем моя ошибка

127