Пятница, 22 Ноября 2024, 20:53

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
return value 3221225477
LPДата: Вторник, 20 Сентября 2016, 00:59 | Сообщение # 1
частый гость
Сейчас нет на сайте
Написать связный список, каждый элемент которого хранит в себе ссылку на следующий полоучилось, а вот для хранения и следующего и предыдущего - нет. Выдает ошибку на 31-ой строке заголовочного файла.

task.h


test.cpp


Сообщение отредактировал LP - Вторник, 20 Сентября 2016, 01:01
GudleifrДата: Вторник, 20 Сентября 2016, 01:23 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Цитата LP ()
newtask->previousTask = first;
first->nextTask = newtask;
first = newtask;

А где newtask->nextTask ?


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
LertmindДата: Вторник, 20 Сентября 2016, 05:16 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Мог бы просто открыть интернет и найти код.
Ты обращался к нулевому указателю first; не обнулял newtask->nextTask (как упомянуто выше); логика вывода неверная. Исправленный класс taskList:

Способ добавления элементов неверный, у тебя будут указатели header и description у всех элементов указывать на одни и те же массивы, например такой код:
Код
    taskList li;
    char arr[200] = {0};
    char arr2[200] = {0};
    
    strcpy(arr, "Header1");
    strcpy(arr2, "Description1");
    li.addTask(arr, arr2);
    
    strcpy(arr, "Header2");
    strcpy(arr2, "Description2");
    li.addTask(arr, arr2);
    
    li.dispTask();

выведет:
Код
Header2:                    
Description2                    
Task id: 2                    
Header2:                    
Description2                    
Task id: 2

И ты наверно заметил, что Task id одинаковые, это потому что статические переменные общие для всех экземпляров класса.
Ещё на каждый new должен быть delete.
Советую перейти на современный С++.


Сообщение отредактировал Lertmind - Вторник, 20 Сентября 2016, 05:41
GudleifrДата: Вторник, 20 Сентября 2016, 17:11 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата Lertmind ()
Советую перейти на современный С++.
Интересно было бы посмотреть.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
LertmindДата: Вторник, 20 Сентября 2016, 17:27 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Gudleifr, уже есть книги, где включён новый стандарт. При правильном использовании ногу будет сложнее прострелить.
SaiteiДата: Вторник, 20 Сентября 2016, 17:34 | Сообщение # 6
старожил
Сейчас нет на сайте
Цитата Lertmind ()
Советую перейти на современный С++.

А что ты имеешь ввиду под "современный С++" в данном контексте?
Человек пишет контейнер, скорее всего, только из-за академического интереса.

Ну а писать nullptr вместо NULL - придирка того не стоит.

Перед переходом на умные указатели нужно обязательно пощупать и сырые.
Вообще надо понимать как оно внутри работает, а не слепо использовать. Вот.
GudleifrДата: Вторник, 20 Сентября 2016, 17:36 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата Lertmind ()
При правильном использовании ногу будет сложнее прострелить.
Т.е. Вы имеете ввиду, что класс "универсальный список на все случаи жизни" уже включен в "современные библиотеки" или на то, что есть какие-то современные нормы по работе с указателями?


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
LertmindДата: Вторник, 20 Сентября 2016, 18:53 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Saitei, я этого не отрицал, но перейти всё равно советую.
Gudleifr, про умные указатели и избавления от new и delete. nullptr - тоже важен. Там ещё были всякие удобства типа списка инициализации и enum class. Я знаю C++ плохо, так что не стоит воспринимать серьёзно :)
XakepДата: Среда, 21 Сентября 2016, 17:05 | Сообщение # 9
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Saitei ()
Ну а писать nullptr вместо NULL - придирка того не стоит.

Это не просто придирка, nulltpr и NULL - разные вещи. NULL - это просто 0, в некоторых библиотеках он так и определен: #define NULL 0
В то время как nullptr имеет тип: "Причина введения nullptr в язык С++ заключается в устранение возможных недоразумений между литералом 0 как целочисленным значением и указателем. Двойное значение литерала 0 может вызывать проблемы при некоторых обстоятельствах. Литерал nullptr имеет тип std::nullptr_t, и его нельзя перепутать со значением другого типа. Он может быть неявно преобразован в любой ссылочный тип, но ни в один целочисленный тип, кроме типа bool." © Айвор Хортон
Цитата Saitei ()
Перед переходом на умные указатели нужно обязательно пощупать и сырые.

А после этого лучше попытаться реализовать сначала свои умные указатели. До введения 11го стандарт так и делали многие разработчики на C++.
SaiteiДата: Четверг, 22 Сентября 2016, 01:56 | Сообщение # 10
старожил
Сейчас нет на сайте
Цитата Xakep ()
Это не просто придирка, nulltpr и NULL - разные вещи.

Само собой )
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг