@FaulerAffe
-

Почему не вызывается конструктор класса?

Есть вот такой класс вещественного числа с двумя конструкторами:
class R
{
private:
    double value;
public:
    //конструктор
    R(double a) : value(a) {};
    R() : value(0) {};
    //Геттер
    double get_number() {return value;};
    //Сеттер
    void set_number(double a) {value = a;};
};

Есть вот такой класс очереди:
class Queue
{
private:
    struct elem
    {
        elem *next, *prev;
        R info;
    };
    elem *head, *tail;
    int len;
public:
    //конструктор
    Queue(double inf)
    {
        head = new elem;
        tail = new elem;
        len = 1;
        head->info.set_number(inf);
    };
    Queue()
    {
        head = NULL;
        tail = NULL;
        len = 0;
        head->info.set_number(0);
    }
...

Если я создаю такой объект:
a.dequeue();
Исполняется строка head->info.set_number(0);, после чего НЕ вызывается конструктор класса R, вызывается сеттер, ну а там вылезает ошибка памяти. Почему так?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Вы как-то неправильно понимаете C++.
У вас написано:

Queue()
{
head = NULL;
tail = NULL;
len = 0;
head->info.set_number(0);
}


head = НИКУДА
НИКУДА -> info.set_number(0);

Естественно, что обращение в НИКУДА ведет неопределенному поведению программы, которое выражается в падении.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы