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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2013, 10:03   #1
dimoncraft
Пользователь
 
Регистрация: 27.03.2013
Сообщений: 22
Стрелка Список

Работаю в MinGW Studio ,только учусь. При компиляции долго думает в консольном окне, потом выдаёт сообщение об ожидании отклика программы и заканчивает непонятным числом.Прошу,помогите,не могу понять в чём дело.

1.Есть двунаправленный список(работающий).
2.Есть класс Актив(вроде тоже работающий).
3.Создаю динамический список активов.
4.Забиваю в него 1 актив.
5.Вывожу инфо.
6.Вылетает ошибка.

Код:
#include <iostream>
using namespace std;



template <class T>

class dl_list
 {
 private:
  struct node
		{
		 T val;
		 node* befo;
		 node* next;
		};
 node*First;
 node*Last;
 int len;
 public:
	dl_list ()
	{
		First=Last=NULL; 
		len=0;
	}
	int getlen()
	{
		return len;
	}
	bool empty() 
	{
		return First==NULL;
	}
	int getLen()
	{
		return len;
	}
	void addBegin (T v)
	{
		node*tmp=new node;
		tmp->val=v;
		if(empty()==true)
		{
			Last=tmp;
		}
		else
		{
			tmp->next=First;
			First->befo=tmp;
		}
			First=tmp;
			len++;
	}
 
	 
	void addFin(T v)
	{
		if(empty())
		{
			addBegin(v);
			return;
		}
	    node*tmp=new node;
	    tmp->val=v;
		Last->next=tmp;
		tmp->befo=Last;
		Last=tmp;
		len++;
	}
	void addAfter(T v, int i)
	{
		if(i<0||i>=len)
		{
			return;
		}
		if(i==len)
		{
			addFin(v);
			return;
		}
		if(empty())
		{
			addBegin(v);
			return;
		}
	    node*tmp=new node;
	    tmp->val=v;
		node*A=getByIndex(i);
		tmp->next=A->next;
		A->next=tmp;
		tmp->befo=A;
		tmp->next->befo=A->befo;
		len++;
	}
	   
	node* getByIndex(int i)
	{
		node*tmp=new node;
		if(i<0||i>=len)
		return NULL;
		if(len/2>i)
		{
			tmp=First;
			for(int j=0;j<i;j++)
			tmp=tmp->next;
		}
		else
		{
			tmp=Last;
			for(int j=0;j<len-i-1;j++)
			tmp=tmp->befo;
		}  
		return tmp;  
	}
	
   void delBegin()
	{
		if(empty
			())
			return;
		if(len==1)
		{
			First=Last=NULL;
			len=0;
			return;
		}
		First=First->next;
		delete First->befo;
		len--;
	}
	
   void delFin()
	{
		if(empty())
		{
			return;
		}
		if(len==1)
		{
			First=Last=NULL;
			len=0;
			return;
		}
		Last=Last->befo;
		delete Last->next;
		len--;
	}
   
   void delByIndex(int i)
	{
		if(empty())
		{
			return;
		}
		if(len==1)
		{
			First=Last=NULL;
			len=0;
			return;
		}
		if(i==len-1)
		{
			delFin();
			return;
		}
		if(i<0||i>=len)
		{
			return;
		}
		node*A=getByIndex(i);
		A->befo->next=A->next;
		A->next->befo=A->befo;
		delete A;
		len--;
	}
   void clear()
   {
	while(len)
	{
		delBegin();
	}
   }
 };

 class Activ
{
  private:
	float price;
	float salary;
	float reputation;
	int level;
	float arend;
	
	char name[30];
  public:
	Activ()
	{
		
	}	  
	Activ(float Price,float Salary,float Reputation,int Level,char* Name,float Arend)
	{
		setPrice(Price);
		setSalary(Salary);
		setReputation(Reputation);
		setLevel(Level);
		setName(Name);
		setArend(Arend);
	}
	void setArend(float Arend)
	{
		arend=Arend;
	}
	void setPrice(float Price)
	{
		price=Price;
	}
	void setLevel(int Level)
	{
		level=Level;
	}
	void setSalary(float Salary)
	{
		salary=Salary;
	}
	void setName(char* Name)
	{
		strcpy(name,Name);
	}
	void setReputation(float Reputation)
	{
		reputation=Reputation;
	}
	float getArend()
	{
		return arend;
	}
	float getPrice()
	{ 
		return price;
	}
	float getSalary()
	{
		return salary;
	}
	char* getName()
	{
		return name;
	}
	int getLevel()
	{
		return level;
	}
	float getReputation()
	{
		return reputation;
	}
	void info()
	{
		cout<<"Name - "<<getName()<<endl;
		cout<<endl<<"Price = "<<getPrice()<<endl;
		cout<<"Salary = "<<getSalary()<<endl;
		cout<<"Reputation = ";
		if(getReputation()>0)
		{
			cout<<"+"<<getReputation()<<endl;
		}
		else
		{
			cout<<getReputation()<<endl;
		}
		cout<<"Level = "<<getLevel()<<endl;
	}
};	

int main()
{
	dl_list<Activ>* Boom;
	Boom=new dl_list<Activ>;
	Boom->addFin(Activ(1003,103,103,3,"Hello!",3));
	Boom->getByIndex(1)->val.info();
	return 0;
}
Пожалуйста,кто может,разберите!
dimoncraft вне форума Ответить с цитированием
Старый 20.08.2013, 10:09   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Вы добавляете один элемент а потом обращаетесь ко второму элементу.
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать список л3 из элементов входящих и в список л1 и в список л2 goosha_gio C++ Builder 1 27.06.2013 22:22
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Список с заглавным звеном, из текстового файла получить список из записей и по нему уже сделать задание Zigfried Помощь студентам 2 04.10.2010 20:29
связать список строк и список целых чисел lirikoff Помощь студентам 5 31.08.2010 13:23
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43