Alvin Seville
|
||||||
1 | ||||||
Почему выскакивает ошибка In instantiation of 'void stack_t<T>::println() const [with T = int]': - строка 165?24.02.2019, 08:49. Показов 1749. Ответов 49
Метки нет (Все метки)
Ошибка:
Кликните здесь для просмотра всего текста
0
|
24.02.2019, 08:49 | |
Ответы с готовыми решениями:
49
int const * const foo(const int* param) const - разъясните значение квалификаторов Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' error: invalid operands of types 'const int*' and 'const int*' to binary 'operator+' Ошибка: Сannot convert const QVector<int> to int... |
"C with Classes"
|
||||||
24.02.2019, 09:45 | 2 | |||||
потому что ты print вызываешь из const метода, void println() const, дальше говорить или уже понял?
Добавлено через 1 минуту Соколиный глаз, ты в курсе что ты тут накосячил?
1
|
"C with Classes"
|
|
24.02.2019, 10:05 | 6 |
переполнение стека при удалении узла, ты код запускал? в деструкторе у тебя delete this приводет к вызову опять этого же деструктора.
Добавлено через 33 секунды бесконечная рекурсия, мать ее
1
|
"C with Classes"
|
|
24.02.2019, 10:07 | 8 |
я же тебе скинул рабочий код https://www.cyberforum.ru/post13351507.html
0
|
Alvin Seville
|
||||||
24.02.2019, 10:10 [ТС] | 9 | |||||
_stanislav, меня очень смущает реализация самого деструктора:
0
|
Alvin Seville
|
|
24.02.2019, 10:14 [ТС] | 11 |
_stanislav, я что-то туплю. У меня всё таки цель память освободить занимаемую узлом стека. А если деструктор этого не делает, то получается же утечка памяти, разве я не прав?
Добавлено через 1 минуту
0
|
"C with Classes"
|
|
24.02.2019, 10:16 | 12 |
Соколиный глаз, у тебя же класс node_t вспомогательный, используется только внутри твоей обертки stack_t, интерфейс node_t ты знаешь, пусть он немного кудрявый. я бы вообще определение node_t в секцию private класса stack_t запихнул
Добавлено через 1 минуту за освобождение памяти отвечает класс stack_t, побегай отладчиком не поленись
1
|
"C with Classes"
|
|||||||||||
24.02.2019, 10:24 | 14 | ||||||||||
когда ты объявил поле ptr_next и инициализировал его указателем на следующий объект, деструктор уже его не должен трогать, угадай почему? я тебе уже писал вроде, при удалении одного узла будет вызываться деструктор который рекурсивно разрушит все твои объекты связанные через указатель ptr_next.
Добавлено через 39 секунд у меня нет. Добавлено через 2 минуты это про
1
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
24.02.2019, 11:15 | 15 |
Если экземплярами класса node_t владеет экземпляр stack_t, то в нем и должно выполняться освобождение памяти.
1
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||||||
24.02.2019, 11:40 | 17 | |||||
Обычно так и происходит, но на всякий случай: сам деструктор не отвечает за освобождение памяти, и здесь не нужно смешивать два процесса: создания/разрушения объекта и выделения/освобождения памяти.
1
|
6091 / 3449 / 1402
Регистрация: 07.02.2019
Сообщений: 8,768
|
|
24.02.2019, 13:38 | 18 |
можно оставить этот деструктор, удобно удалять весь стек, а в классе stack для удаления отдельного элемента списка достаточно предусмотреть разрушение связей
0
|
6091 / 3449 / 1402
Регистрация: 07.02.2019
Сообщений: 8,768
|
|||||||||||
24.02.2019, 13:58 | 20 | ||||||||||
тока я обычно проверяю на валидность
1
|
24.02.2019, 13:58 | |
24.02.2019, 13:58 | |
Помогаю со студенческими работами здесь
20
ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int) Ошибка Cannot convert 'const char *' to 'void *' int const и const int в чем разница этих записей Чем отличаются выражения (const int[]){value} от (const int[]){100} Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |