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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> односвязный список 
:(
    Опции темы
papam
Дата 13.4.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я добавил в класс функцию Search(поиск элемента) и функцию insert(удаление элемента) программа выдает ошибки:
error C2511: 'Search' : overloaded member function 'void (void)' not found in 'List'
error C2065: 'Next' : undeclared identifier
error C2440: 'initializing' : cannot convert from 'int' to 'struct Element *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
error C2227: left of '->Next' must point to class/struct/union
error C2227: left of '->Next' must point to class/struct/union
error C2541: delete : cannot delete objects that are not pointers
Error executing cl.exe.
Что я не правильно написал? Помогите их исправить или подскажите как лучше написать эти функции пожалуста!!!

Вот программа:
Код

#include <iostream.h>
#include <string.h>

// Элемент данных
struct Element
{
   // Данные
   char data;    
   // Адрес следующего элемента списка
   Element * Next;
   
};

// Односвязный список
class List
{
   // Адрес головного элемента списка
   Element * Head;
   // Количество элементов списка
   int Count;

public:
   // Конструктор
   List();
   // Деструктор
   ~List();
    
   // Добавление элемента в список
   // (Новый элемент становится головным)
   void Add(char data);
    
   // Удаление элемента списка
   // (Удаляется головной элемент)
   void Del();
   // Удаление всего списка
   void DelAll();
   void List::Search(List Head,int target);
void List::insert(int before,int discard);
   // Распечатка содержимого списка
   // (Распечатка начинается с головного элемента)
   void Print();
    
   // Получение количества элементов, находящихся в списке
   int GetCount();
};
List::List()
{
   // Изначально список пуст
   Head = NULL;
   Count = 0;
}

List::~List()
{
   // Вызов функции удаления
   DelAll();
}

int List::GetCount()
{
   // Возвращаем количество элементов
   return Count;
}

void List::Add(char data)
{
   // создание нового элемента
   Element * temp = new Element;

   // заполнение данными
   temp->data = data;
   // следующий элемент - головной элемент списка
   temp->Next = Head;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

   // новый элемент становится головным элементом списка
   Head = temp;

   Count++;
}

void List::Del()
{
   // запоминаем адрес головного элемента
   Element * temp = Head;
   // перебрасываем голову на следующий элемент
   Head = Head->Next;
   // удаляем бывший головной элемент
   delete temp;

   Count--;
}

void List::DelAll()
{              
      // Удаляем элементы по одному
      Del();                                                                     
}
void List::Search()
{
    for(Head=here;here;here=here->Next)
        if(here->Data==temp)return here;
        return NULL;
}
void List::insert(int before,int discard)
{
    Element * temp=Next;
    before->Next=discard->Next;
    delete discard;
}

void List::Print()
{
   // запоминаем адрес головного элемента
   Element * temp = Head;
   // Пока еще есть элементы
   while(temp != 0)
   {
      // Выводим данные
      cout << temp->data<< " ";
      // Переходим на следующий элемент
      temp = temp->Next;
      
   }

   cout << endl;
}
// Тестовый пример
void main()
{
   // Создаем объект класса List
   List lst;

   // Тестовая строка
   char s[] = "Hello, World !!!\n";
   // Выводим строку
   cout << s << endl;
   // Определяем длину строки
   int len = strlen(s);
   // Загоняем строку в список
   for(int i = 0; i < len; i++)
      lst.Add(s[i]);
   // Распечатываем содержимое списка
   lst.Print();
   // Удаляем три элемента списка
   lst.Del();
   lst.Del();
   
   // Распечатываем содержимое списка
   lst.Print();
   
}


--------------------
No Fucking Future
PM MAIL ICQ   Вверх
adonin
Дата 13.4.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

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



Во первых: В описании класса метод Search() объявлен как void Search(List Head,int target);
А реализуется метод void Search(), который не объявлен (забыл про параметры)
Во вторых: Next - это свойство класса Element. Поэтому надо писать:
Код

void List::insert(int before,int discard)
{
    Element * temp=Объект_Класса_Element.Next;      // здесь
    before->Next=discard->Next;
    delete discard;
}


В третьих: в методе insert() параметры: int before,int discard. А Вы рассматриваете их как указатели на объекты. Нужно так:
void List::insert(Element * before, Element * discard) Не забудьте исправить прототип метода в объявлении класса.

Ну, вроде бы и всё.
--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
Earnest
Дата 13.4.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Убери квалификаторы List:: из определения класса.


--------------------
...
PM   Вверх
papam
Дата 13.4.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо Adonin! Попробую.
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
papam
Дата 13.4.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Исправил ошибки,тепереь прога выглядит:
Код

#include <iostream.h>
#include <string.h>

// Элемент данных
struct Element
{
   // Данные
   char data;    
   // Адрес следующего элемента списка
   Element * Next;
   
};

// Односвязный список
class List
{
   // Адрес головного элемента списка
   Element * Head;
   // Количество элементов списка
   int Count;

public:
   // Конструктор
   List();
   // Деструктор
   ~List();
    
   // Добавление элемента в список
   // (Новый элемент становится головным)
   void Add(char data);
    
   // Удаление элемента списка
   // (Удаляется головной элемент)
   void Del();
   // Удаление всего списка
   void DelAll();
   void List::Search(List Head,int target);
   void List::insert(Element* before,Element* discard);
   // Распечатка содержимого списка
   // (Распечатка начинается с головного элемента)
   void Print();
    
   // Получение количества элементов, находящихся в списке
   int GetCount();
};
List::List()
{
   // Изначально список пуст
   Head = NULL;
   Count = 0;
}

List::~List()
{
   // Вызов функции удаления
   DelAll();
}

int List::GetCount()
{
   // Возвращаем количество элементов
   return Count;
}

void List::Add(char data)
{
   // создание нового элемента
   Element * temp = new Element;

   // заполнение данными
   temp->data = data;
   // следующий элемент - головной элемент списка
   temp->Next = Head;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

   // новый элемент становится головным элементом списка
   Head = temp;

   Count++;
}

void List::Del()
{
   // запоминаем адрес головного элемента
   Element * temp = Head;
   // перебрасываем голову на следующий элемент
   Head = Head->Next;
   // удаляем бывший головной элемент
   delete temp;

   Count--;
}

void List::DelAll()
{              
      // Удаляем элементы по одному
      Del();                                                                     
}
void List:: Search(Element*Head,Element* target)
{
    for(Head=here;here;here=here->Next)
        if(here->Data==temp)return here;
        return NULL;
}
void List::insert(Element* before,Element*discard)
{
    Element * temp=Element.Next;
    before->Next=discard->Next;
    delete discard;
}

void List::Print()
{
   // запоминаем адрес головного элемента
   Element * temp = Head;
   // Пока еще есть элементы
   while(temp != 0)
   {
      // Выводим данные
      cout << temp->data<< " ";
      // Переходим на следующий элемент
      temp = temp->Next;
      
   }

   cout << endl;
}
// Тестовый пример
void main()
{
   // Создаем объект класса List
   List lst;

   // Тестовая строка
   char s[] = "Hello, World !!!\n";
   // Выводим строку
   cout << s << endl;
   // Определяем длину строки
   int len = strlen(s);
   // Загоняем строку в список
   for(int i = 0; i < len; i++)
      lst.Add(s[i]);
   // Распечатываем содержимое списка
   lst.Print();
   // Удаляем три элемента списка
   lst.Del();
   lst.Del();
   
   // Распечатываем содержимое списка
   lst.Print();
   
}


Ошибки:
error C2511: 'Search' : overloaded member function 'void (struct Element *,struct Element *)' not found in 'List'
: see declaration of 'List'
error C2275: 'Element' : illegal use of this type as an expression
see declaration of 'Element'
Error executing cl.exe.


--------------------
No Fucking Future
PM MAIL ICQ   Вверх
bsa
Дата 13.4.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Э не понял, а зачем в этом коде:
Код

   void List::Search(List Head,int target);    
   void List::insert(Element* before,Element* discard);

ты используешь 'List::'?

Кстати тебе на эту ошибку еще Earnest указывала.

Это сообщение отредактировал(а) bsa - 13.4.2006, 20:46
PM   Вверх
papam
Дата 14.4.2006, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А как передать символы в функцию insert которые нужно удалить?
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
MAKCim
Дата 14.4.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

А как передать символы в функцию insert которые нужно удалить?

insert - это удаление??
передать можно просто char если один символ
Код

void erase(char);

можно эллипсис использовать (извращение)
Код

void erase(unsigned int count, ...);

можно передать предикат (если он выполняется над очередным символом - он удаляется)
...


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
papam
Дата 14.4.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как функции void main() указать какие символы удалять ?
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
papam
Дата 14.4.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Помогите дописать функцию void main(),пожалуста!!!
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
MAKCim
Дата 14.4.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Код

int main(int argc, char* argv[])
{
    // argc - количество параметров переданных в программу
    // argv - массив строк переданных в программу параметров 
    return 0;
}

вызов в linux/unix:
Цитата

<путь к программе>/<программа> <через пробел нужные символы>

в винде аналогично
пример
Цитата

# ./test a b c d

Код

// test.cpp

int main(int argc, char* argv[])
{
    /*
        argv[1] - адрес строки "a"
        argv[2] - адрес строки "b"
        ...
   */
    return 0;
}



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



to papam
Настоятельно рекомендую купить книгу по C/C++ для начинающих. Так как ответы на задаваемые вопросы находятся в самом начале этих книг.

Код

#include <stdio.h>
int main(int argc, char *args[]) {
    int i;
    printf("Programm name is \"%s\"\n", args[0]);
    for( i = 1; i < argc; ++i)
       printf("Parameter #%d: \"%s\"\n", i, args[i]);
    return 0;
}

Результат работы программы (допустим, собранной под именем test), запущенной сделующим образом:
Код
$ test a 2 b asdf
Programm name is "test"
Parameter #1: "a"
Parameter #2: "2"
Parameter #3: "b"
Parameter #4: "asdf"
$

(Для тех кто с unix не работал, объясняю, что $ - это приглашение коммандной строки)
PM   Вверх
adonin
Дата 15.4.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

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



Да, блин!!! papam, Почитай какую нибудь книгу по C++!!! Ошибки глупейшие!!!
Цитата(papam @ 13.4.2006, 19:38 Найти цитируемый пост)
error C2511: 'Search' : overloaded member function 'void (struct Element *,struct Element *)' not found in 'List'
: see declaration of 'List'

Тебе же сказано английским языком: "Смотри объявление класса List". У тебя там объявлен метод Search(List Head,int target)
а реализуешь ты метод Search(Element*Head,Element* target). Типы параметров не соответствуют. Вот он и говорит тебе "Перегруженный член класса не найден в List". Он не может найти объявление метода с такими параметрами. Типы параметров должны совпадать.
Во вторых:
Код

void List::insert(Element* before,Element*discard)
{
    Element * temp=Element.Next;   //Смотри сюда!!!
    before->Next=discard->Next;
    delete discard;
}

Element это не объект, а имя класса. Ты для чего параметры передавал Element* before,Element*discard?
Делай так:
Код

Element * temp=before->Next;
// или
Element * temp=discard->Next;
// Взависиммости от того, что нужно положить в temp.

Логику отлаживай сам.
--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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