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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2008, 12:33   #1
mahsus
Пользователь
 
Регистрация: 06.10.2007
Сообщений: 14
Восклицание Не создается указатель на vector!

Здравствуйте!
Почему-то не работает конструктор:

Код:
#include <vector>
#include <string>
typedef vector<string*> string_list;
typedef vector<Player*> player_list;

class Player{
public:
	Player();
	~Player();
private:
	object_list *ObjectList;
};

class Generals{
public:
	Generals();
	~Generals();
private:
	string_list *AccessList;
	player_list *PlayerList;
};

Generals::Generals()
{
	PlayerList=new player_list(); //здесь не может создать лист
	AccessList=new string_list();
}
Generals::~Generals()
{
	delete AccessList;
	delete PlayerList;
} //*


при компиляции выдает предупреждения типа
warning C4786: 'std::reverse_iterator<std::basic_s tring<char,std::char_traits<char>,s td::allocator<char> > * *,std::basic_string<char,std::char_ traits<char>
,std::allocator<char> > *,std::basic_string<char,std::char_ traits<char>,std::allocator<char> > * &,std::basic_string<char,std::char_ traits<char>,std::allocator<char> > * *,int>' : identifier was truncated to '255' characters in the debug information
и ссылается на строку //* и на файл V98\Include\vector:

Код:
explicit vector(const _A& _Al = _A())
		: allocator(_Al), _First(0), _Last(0), _End(0) {}
при запуске не может создать PlayerList.
Поделитесь пожалуйста знаниями по контейнерным классам.

Модератор: Используйте тег <CODE>. И прочтите правила форума.

Последний раз редактировалось merax; 06.01.2008 в 17:26.
mahsus вне форума Ответить с цитированием
Старый 06.01.2008, 12:49   #2
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

что такое object_list?
не вижу класса Object;
при добавлении строк (в нужных местах)
Код:
using namespace std;
//...
class Object {};
class Player;

typedef vector<string*> string_list;
typedef vector<Object*> object_list;
typedef vector<Player*> player_list;
все работает

и еще, ты испольуешь итераторы?
Alek86 вне форума Ответить с цитированием
Старый 06.01.2008, 13:59   #3
mahsus
Пользователь
 
Регистрация: 06.10.2007
Сообщений: 14
По умолчанию

все эти строки присутствуют, все равно не работает
я же не выслал весь код.

Код:
#ifndef MILIT_H
#define MILIT_H
#include <vector>
#include <string>
using namespace std;

//************************************************************
************************************************************
#define MAX_CAPITAL 		10000
#define MAX_INTERVAL 		1000

class MilitUnit; class BuildUnit;
class Player; class Object;

typedef int money_ty;
typedef int index_ty;
typedef vector<int> int_list;
typedef vector<string*> string_list;
typedef vector<Player*> player_list;
typedef vector<Object*> object_list;
//************************************************************
class Player{
public:
	Player();
	~Player();
	object_list &GetObjectList()const{return *ObjectList;}
	int GetObjectCount() const;
	void DeleteObject(int);
	Object *CreateObject(index_ty i_ty);
	int AddObject(Object *);
private:
	money_ty CurrMoney;
	object_list *ObjectList;
};
//************************************************************
class Object{
public:
	virtual int GetHealth(){return Health;}
	virtual void SetHealth(int h){Health=h;}
	virtual string GetName(){return Name;}
	virtual int DecRemainTime();
	virtual int IsPurpose(){if (Purpose)return 1;else return 0;}
	virtual int IsPrepare(){return Prepare;}
	virtual void SetPrepare(bool prep)
	{Prepare=prep;}
	virtual void SetPurpose(Object *purp);
	virtual int ToDo()=0;
	virtual void Show()=0;
	virtual string &GetShowString()const;	
	virtual int_list &GetAccessList()const{return *AccessList;}
	virtual int_list &GetCoeffList()const{return *CoeffList;}
	virtual int GetNumber()const{return Number;}
	virtual bool GetFireAbility()const{return FireAbility;}
protected:
	int_list *AccessList;
	int_list *CoeffList;
	string Name;
	int Health;
	Object *Purpose;
	int RemainTime;//осталось времени до боеготовности
	bool Prepare;
	bool FireAbility;
	int Number;
};
//************************************************************
class BuildUnit:public Object{
public:
	virtual int ToDo()=0;
	virtual void Show()=0;	
};
//************************************************************
class MilitUnit:public Object{
public:
	virtual int GetFirePower(){return FirePower;}
	virtual int ToDo()=0;
	virtual void Show()=0;
protected:
	int FirePower;
};
//************************************************************ 
//GAME
class Generals{
public:
	Generals();
	~Generals();
	int Run(int interval=MAX_INTERVAL);
	int Query(string,int);
	int Query(Object *);
	Object *Query(object_list &);
	void NextPlayer();
	int AddPlayer(int cap=MAX_CAPITAL,int count=2);
	int GetCurrPlayer()const{return CurrPlayer;}
	int GetPlayerCount()const;
	player_list &GetPlayerList()const{return *PlayerList;}
	string_list &GetAccessList()const{return *AccessList;}
	void CheckLife();
	void Show();
private:
	void SetCurrPlayer(int c){CurrPlayer=c;}
	string_list *AccessList;
	player_list *PlayerList;
	int CurrPlayer;
};
//************************************************************
//военные единицы
//************************************************************
//Танк
class Tank: public MilitUnit{
public:
	Tank();
	~Tank();
	int ToDo();
	void Show();
protected:
	int FirePower;
};
//************************************************************

#endif
это заголовочный файл тут понятнее, может что не так?

Модератор: Используйте тег <CODE>. И прочтите правила форума.

Последний раз редактировалось merax; 06.01.2008 в 17:26.
mahsus вне форума Ответить с цитированием
Старый 06.01.2008, 14:01   #4
mahsus
Пользователь
 
Регистрация: 06.10.2007
Сообщений: 14
По умолчанию

вместо смайлов разрешение видимости
mahsus вне форума Ответить с цитированием
Старый 06.01.2008, 14:04   #5
mahsus
Пользователь
 
Регистрация: 06.10.2007
Сообщений: 14
По умолчанию

реализация классов не помещается в ответ, может выслать куда?
mahsus вне форума Ответить с цитированием
Старый 06.01.2008, 14:09   #6
mahsus
Пользователь
 
Регистрация: 06.10.2007
Сообщений: 14
По умолчанию

итераторы практически не использую, здесь меня устраивают конструкции
for(int i=0;i<10;i++)
GetAccessList().push_back(&(::NAME[i]));
максимум
GetObjectList().erase(GetObjectList ().begin()+n); //n-int
mahsus вне форума Ответить с цитированием
Старый 06.01.2008, 14:13   #7
mahsus
Пользователь
 
Регистрация: 06.10.2007
Сообщений: 14
По умолчанию

что касается реализации, некоторые моменты:

Код:
Player::Player()
{
	CurrMoney=MAX_CAPITAL;
	ObjectList=new object_list();
	Object *obj=CreateObject(0);
	ObjectList->push_back(obj);
	obj->SetPrepare(true);
}
Player::~Player()
{
	delete ObjectList;
}
Generals::Generals()
{
	CurrPlayer=0;
	PlayerList=new player_list();
	AccessList=new string_list();
	for(int i=0;i<10;i++)
		GetAccessList().push_back(&(::NAME[i]));
}
Generals::~Generals()
{
	delete AccessList;
	delete PlayerList;
}
это что касается проблемы...

Модератор: А вот тут уже репрессивные меры

Последний раз редактировалось merax; 06.01.2008 в 17:27.
mahsus вне форума Ответить с цитированием
Старый 11.01.2008, 16:07   #8
Rage
Новичок
Джуниор
 
Регистрация: 10.01.2008
Сообщений: 2
По умолчанию

я немного недопонял, тебя варнинг мучает, или прога не компилится?
Rage вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по <vector> kezman Общие вопросы C/C++ 1 13.08.2008 21:48
Использование typedef с vector <type> kezman Общие вопросы C/C++ 2 19.07.2008 21:17
Кнопка не создается Манжосов Денис :) Компоненты Delphi 10 28.04.2008 17:43
Указатель n на m CESHNIK Общие вопросы C/C++ 7 07.03.2008 23:35