Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2010, 06:07   #1
PriestOfLuna
Новичок
Джуниор
 
Регистрация: 27.06.2010
Сообщений: 2
По умолчанию ЛОС в с++

Программа обработки картотеки магазинов. В выделенной строке выводит ошибку что дескать last initialized more than once, а к тому же еще и declaration syntax error. Я решительно не понимаю в чем дело =( помогииите
Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <iomanip.h>
 struct shop
 {
  int number;
  char adress[40];
  char type[20];
  shop *next;

  int add();
  void del();
  void search();
  void output();
  void outall();
 };

 shop *listHead=new(shop);  //zaglavnoe zveno
 shop *last=listHead;          //poslednee zveno
 (*last).next=NULL;
 shop *current;                 //tekushee zveno
 int key;

 int shop::add()
 {
  while(1==1)
  {
   last=new(shop);
   last=(*last).next;

   cout<<"number:";
   cin>>(*last).number;

   cout<<"adress:";
   gets((*last).adress);

   cout<<"type:";
   gets((*last).type);

   cout<<"\n";

   (*last).next=NULL;

   cout<<"to add more, press \'a\'";
   switch(getch())
   {
    case'a': break;
    default: return 0;
   }
  }
 }

 void shop::search()
 {
  key=0;
  int flag=0;
  current=listHead;
  if((*current).next==NULL)
   cout<<"List is empty\n";

  else
  {
   cout<<"Enter a key number:";
   cin>>key;

   while((*current).next!=NULL)
   {
     if((*current).number==key)
      {(*current).output();
      flag=1;
      }
   }
   if(flag==0)
    cout<<"Shop not found\n";
  }
 }
 void shop::del()
 {
  shop *previous;
  key=0;

  cout<<"Enter a key number:";
  cin>>key;
  current=(*listHead).next;
  while(current!=NULL)
  {
   if((*(*current).next).number==key)
    {
     previous=current;
     current=(*current).next;
     (*previous).next=(*current).next;
     delete(current);
    }
   current=(*current).next;
  }

 }

 void shop::output()
 {
  cout<<"\nnumber:"<<number;

  cout<<"\ntype:"<<type;

  cout<<"\nadress:"<<adress;
 }

 void shop::outall()
 {
  if((*listHead).next==NULL)
    cout<<"List is empty";
  else
  {
   cout<<"ЪДДДДДДВДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДї\n"; // писалось в borland c++ под DOS, так модно там делается таблица =)
   cout<<"іnumberі    type    і       adress       і\n";
   cout<<"АДДДДДДБДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДЩ\n";
  current=(*listHead).next;
  while(current!=NULL)
  {
   cout<<"і"<<setw(6)<<(*current).number<<"і"<<setw(12)<<(*current).type;
   cout<<"і"<<setw(20)<<(*current).adress<<"і\n";
   cout<<"АДДДДДДБДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДЩ\n";
   current=(*current).next;
  }
  }
 }

 int main()
{shop obj;
clrscr();

while(1==1)
{
clrscr();
cout<<"    1. Add a new element"<<'\n';
cout<<"    2. Delete element"<<'\n';
cout<<"    3. Search"<<'\n';
cout<<"    4. Print all"<<'\n';
cout<<"    q. Exit"<<'\n';

switch(getch())
  {
 case '1': obj.add(); break;
 case '2': obj.del(); break;
 case '3': obj.search(); break;
 case '4': obj.output(); break;
 case 'q': return 0;
  }
 }

}

Последний раз редактировалось PriestOfLuna; 27.06.2010 в 12:17.
PriestOfLuna вне форума Ответить с цитированием
Старый 27.06.2010, 11:17   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

что такое listHead и где оно обьявлено? Занесите код в специальный тег
NiCola999 вне форума Ответить с цитированием
Старый 27.06.2010, 12:27   #3
PriestOfLuna
Новичок
Джуниор
 
Регистрация: 27.06.2010
Сообщений: 2
По умолчанию

ListHead это как бы заголовок, который вводится чтобы добавление элемента было однотипным и для обращения к началу списка
PriestOfLuna вне форума Ответить с цитированием
Старый 27.06.2010, 13:40   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

кароче не знаю как тебе обьяснить, но это:
Код:
(*last).next=NULL;
надо писать в какой-то функции, глобально так нельзя присвоить. То есть должны быть функции что-то типо конструктора и деструктора, как в классе:

Код:
struct shop{....}

shop *lastHead = NULL;

void init(){
    lastHead = new shop;
    (*lastHead).next = NULL;
   //....
}

void destroy(){
    shop *p = lastHead, buf = NULL;
     while(p){
         buf = p->next;
         delete p;         
         p = buf;
     } 
   //....
}

Последний раз редактировалось NiCola999; 27.06.2010 в 13:44.
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пож-та.Паскаль. Линейный односвязный список (ЛОС) tonich Паскаль, Turbo Pascal, PascalABC.NET 1 25.02.2008 21:55