Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление элемента связного списка. 
V
    Опции темы
Killer_13
  Дата 18.10.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Знаю, знаю, что достал уже своими вопросами, в частности о структурах, но ведь форумы для того и придумывались..
Сначало поискал на форуме нашел 3 темы, но они мне че т не оч помогли.
Вот, стандартное удаление элемента - пример из книги, но почему то не срабатывает.
Проверил написанное мною и написанное в книге несколько раз, все одинаково, но не срабатывает.
Так вот.
структура
Код

struct Anmeldung {
  Anmeldung* next;
  string   Nachname;             // Name Teilnehmer
  string   Vorname;              // Vorname Teilnehmer
  string   Email;                // Email Adresse Teilnehmer 
  string   Matrikelnummer;       // Matrikelnr. Teilnehmer
  string   Studienrichtung;      // Studienrichtung Teilnehmer
  string   Semester;             // Studiensemester Teilnehmer
  string   G1name;               // Name Wunschkandidat fuer Praktikumsgruppe
  string   G1vorname;            // Vorname Wunschkandidat
  string   Anmerkung;            // Freier Text
};


функция удаления элемента если поле матрикель равно "012345", а оно равно и происходит сбой...
передаю первый элемент
Код

void delKnot(Anmeldung* root) {

    if (root == 0)
        cout << "Die Liste ist leer" << endl;

    if (root->Matrikelnummer == "012345") {

        Anmeldung* del = root;
        if (root->next != NULL)
            root = root->next;
        delete del;
    }
}


Пасиб.
PM MAIL   Вверх
xvr
Дата 18.10.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Замените заголовок вашей функции на
Код

void delKnot(Anmeldung* &root)


PM MAIL   Вверх
Killer_13
Дата 18.10.2010, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Что то не так все равно. Теперь даже запускаться не хочет. :(
Вот прототип, 
Код

void delKnot(Anmeldung*);


вот так вызываю
Код

 Anmeldung *root = NULL;

 delKnot(root);


ошибка
Код

undefined reference to `delKnot(Anmeldung*)'

PM MAIL   Вверх
xvr
Дата 18.10.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Killer_13 @  18.10.2010,  15:51 Найти цитируемый пост)
Вот прототип, 
Прототип очевидно неправильный, должен быть void delKnot(Anmeldung*&);

PM MAIL   Вверх
Killer_13
Дата 18.10.2010, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



так и есть, первый раз вижу такое, не могли б вы в 2 словах обяснить, для чего (* и &) 

теперь работает

Код

void delKnot(Anmeldung*&);


void delKnot(Anmeldung* &root) {
    if (root == 0)
        cout << "Die Liste ist leer" << endl;
    if (root->Matrikelnummer == "012345") {
        Anmeldung* del = root;
        if (root->next != NULL)
            root = root->next;
        delete del;
    }
}

PM MAIL   Вверх
Crafty
Дата 18.10.2010, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



*& это ссылка на указатель. Думаю что такое ссылка и указатель вы знаете.
PM MAIL   Вверх
Killer_13
Дата 18.10.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Знаю, понял. smile Пасиб.
А почему нельзя было просто передать указатель?
PM MAIL   Вверх
Crafty
Дата 18.10.2010, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Цитата(Killer_13 @  18.10.2010,  22:16 Найти цитируемый пост)
А почему нельзя было просто передать указатель? 

При передаче указателя мы будем работать с самой структурой, а нам нужно работать с указателем на структуру. Как вариант можно еще передавать указатель на указатель, что-то типа void delKnot(Anmeldung** root), но все-таки ссылка на указатель будет удобней
Код

void delKnot(Anmeldung* root) {
    if (root == 0)
        cout << "Die Liste ist leer" << endl;
    if (root->Matrikelnummer == "012345") {
        Anmeldung* del = root;
        if (root->next != NULL)
            root = root->next;
        delete del;
    }
}

PM MAIL   Вверх
Killer_13
Дата 18.10.2010, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: 1
Всего: 1



Все понятно, вопрос решен, кста - пробовал делать с указателем на указатель, была такая мысля, но как всегда не пошло.. :(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0693 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.