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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2012, 12:28   #1
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию Шаблоны, указатели на элемент созданный шаблонным классом

Код:
template <typename Type>
class Box{
	public: Type T;
			Box<Type>* Next;
			Box(){T=0; Next=NULL;}
			Box(int t){T=t; Next=NULL;}
			friend istream& operator>>(istream &ist, Box<Type> &Y){ist>>Y.T; return ist; };
			friend ostream& operator<<(ostream &ost, Box<Type> &Y){ost<<Y.T; return ost; };
};

template <class Class> 
class List{

public: 
	Box<Class>* Begin;
	List(){Begin=0;};
	void Show(){cout<<"Show must go on...";};
	void Sort(){};

	void Download(){
		cout<<"What is the next item in the list?: ";
		Box<Class>B;
		if(Begin!=0){B.Next=Begin;}
		Begin=*B;  // !!!!Ошибка тут!!!!
	};

	void Remove(){};
	void Refresh(){};
} ;

Собственно делаю шаблонный список состоящий из элементов создаваемых шаблонным классом контейнер.

Begin - указатель на первый элемент списка.
Box<Class>* Begin - инициализация.
B - элемент.
Box<Class> B - инициализация.
Begin=*B - ошибка.
Цитата:
error C2100: illegal indirection
Надо перегружать "*"?
Если да, можете подсказать как?
pinkiller вне форума Ответить с цитированием
Старый 05.01.2012, 12:43   #2
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

А еще я подумал и мой могучий интеллект подсказал мне что мой интеллект совсем не могучий и надо писать
Код:
Begin=&B;

Да и еще. после функции Download. Элемент B будет безвозвратно удален, и все операции которые я проделывал - напрасны?

Последний раз редактировалось pinkiller; 05.01.2012 в 12:51.
pinkiller вне форума Ответить с цитированием
Старый 05.01.2012, 12:50   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

у тебя B - это объект. Это не указатель. А ты пытаешься его "разыменовать". Ты уверен, что простые объекты можно разыменовывать?


Это все равно что попытаться сделать:

Код:
    int a=10;

    *a; // error C2100: недопустимое косвенное обращение
_Bers вне форума Ответить с цитированием
Старый 05.01.2012, 12:51   #4
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию

_Bers Я во втором сообщении дописал ><
pinkiller вне форума Ответить с цитированием
Старый 05.01.2012, 12:52   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
template <typename Type>
class Box{
	public: Type T;
			Box<Type>* Next;
			Box(){T=0; Next=NULL;}
			Box(int t){T=t; Next=NULL;}
			friend istream& operator>>(istream &ist, Box<Type> &Y){ist>>Y.T; return ist; }; //<---- ошибка
			friend ostream& operator<<(ostream &ost, Box<Type> &Y){ost<<Y.T; return ost; }; //<---- ошибка
};
Эти ошибки дадут знать, когда ты попытаешься запустить методы френдозы на выполнение. У тебя просто не скомпилируется
_Bers вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заменить элемент элемент одномерного массива? Паскаль Женька Good Помощь студентам 5 21.12.2011 00:07
Одномерный массив. Необходимо заменить последний положительный элемент на второй элемент массива кумитэ Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2011 16:44
Массив 7х7 целого типа в каждом столбце поменять max элемент и элемент побочной диагонали Sheport Паскаль, Turbo Pascal, PascalABC.NET 1 20.06.2011 23:30
помогите template<class> (Шаблоны и указатели) breate Общие вопросы C/C++ 3 23.10.2009 23:17
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39