Рекурсивный конструктор

158
21 ноября 2021, 19:50

класс TreeNode наследуется от CalcTree, в классе CalcTree создается указатель на TreeNode => вызывается конструктор TreeNode, который рекурсивно вызывает конструктор CalcTree. как от этого избавиться?

template <typename type_t>
CalcTree<type_t>::CalcTree()
{
    head_node (new TreeNode<type_t>(0));
    log_file = fopen(log_filename, "w");
}
TreeNode<type_t>::TreeNode(const type_t num = 0, int type_node_t = VALUE, TreeNode<type_t>* left_t = nullptr, TreeNode<type_t>* right_t = nullptr) :
            number(num),
            type_node(type_node_t),
            left_child(left_t),
            right_child(right_t)
        {}
Answer 1

Просто инициализируйте этот указатель нулем, а в наследниках можете инициализировать адресом обьекта своего типа, по следующему образцу:

struct A;
struct B {
    A* pa;
    B() : pa(nullptr) {}
};
struct A : B{
    A() { pa = new A; }
};

Другое дело, что нет никакого смысла в этом. Этот указатель вполне можете хранить и в самом классе наследника. Базовому классу он вообше не нужен

READ ALSO
Как получить данные о пикселе файла (.bmp) с помощью GetPixel ()?

Как получить данные о пикселе файла (.bmp) с помощью GetPixel ()?

Как с помощью функции GetPixel получить данные о пикселе файла изображения? Или как сделать хендл не к окну консоли, а к файлу?

86
Что означает int a : 1?

Что означает int a : 1?

Конкретно-> int a :1;

95
Программа обработки файла типа запись,c++

Программа обработки файла типа запись,c++

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

92
отрицательное число в std::bitset

отрицательное число в std::bitset

Если некоторый обьект std::bitset инициализирован отрицательным числом, как вернуть истинное значение этого числа методами std::bitset? Например,...

114