Dodawanie elementu do konteneru

0

Witam,
Staram się napisać kontener z szablonu, napisałem funkcję dodaj, i testuję ją dla typu int, lecz przy przekazaniu argumentów dostaje bład:

Error 1 error C2440: '=' : cannot convert from 'int' to 'int *'

Szablon klasy:

template<class TYP>
class Kontener{
private:
	static int rozmiar;
	TYP *element;
	Kontener<TYP> *nastepny;
public:
	Kontener();
	~Kontener();
	void dodaj(TYP &t);
	void usun(int);
	TYP& pobierz(int);
	void wypisz();
};
static int rozmiar=0; //LICZNIK ILE JEST ELEMENTOW W KONTENERZE
 

Kod metody dodaj:

template<class TYP>
void Kontener<TYP>::dodaj(TYP &t){
	Kontener<TYP> *nowy = new Kontener<TYP>;
	if (rozmiar == 0) //NIE MA ELEMENTOW W KONTENERZE
	{
		nowy->element = t;	//PRZYPISANIE NOWEMU przekazany element;
		rozmiar++;
		nowy->nastepny=0;
	}else	//JESLI LISTA JEST ZAPELNIONA
	{
		Kontener<TYP> *tmp= new Kontener<TYP>;	
		tmp = this;//tmp przypisujemy adres 1 elementu listy
		while(tmp->nastepny != 0){
			tmp = tmp->nastepny;		//IDZ DO KOLEJNEGO ELEMENTU
		}
		tmp->nastepny->element = t;
		rozmiar++;
		tmp->nastepny->nastepny=0;
	}


} 

Wywolanie w main():

int *a = new int();
	int *b = new int();
	*a = 23;
	*b = 35;
	Kontener<int> *lista;
	lista = new Kontener<int>;
	lista->dodaj(*a);
	lista->dodaj(*b); 

Jak to obejść, co należy poprawić?Proszę o wskazówki

0

Pomylili ci się pojęcia kontenera oraz zawartości kontenera, stworzyłeś coś w rodzaju "salostudenta" czyli taki nieumarlak który jednocześnie jest studentem oraz sala ćwiczeniową czyli bubel projektowy.
To co podałeś jako "w main" da się skrócić (przy okazji eliminując wyciek pamięci) do:

    Kontener<int> *lista=new Kontener<int>();
    lista->dodaj(23);
    lista->dodaj(35);
0

Ok. Dzięki, robię teraz to na podstawie książki Pasja C++. Ostatnio mam za dużo materiału do ogarnięcia dzień po dniu. Ale noc jeszcze długa coś się zrobi. Dzięki za odpowiedź.

Kolejne pytanie: Mam przeładowany

 operator<< 

do wypisywania obiektów z kontenera dla int nie działa, podaje kod:
Deklaracje w szablonie klasy:

friend ostream & operator<<(ostream & stru, lista<TYP> & x); 

Definicja po za szablonem:

template<class TYP>
ostream & operator<<(ostream & stru, lista<TYP> & x){
	lista<TYP>::wezel * skoczek = x.pierwszyW;
	for(int i=0; skoczek ; i++, skoczek = skoczek->nastepca){
		stru << i <<". " <<*(skoczek->wskobj) <<"  ";
	}
	stru <<endl;
	return stru;
} 

A tak próbuję wywoływać:

 //TESTOWANIE DODAWANIA KONETENERA TYPU INT
	cout <<"Testowanie dla liczb calkowitych: "<<endl;
	int temp;
	lista<int> kontener_int;
	//cout <<"sizeof(kontener) "<<sizeof(kontener)<<endl;
	for(int i=0; i<10 ; i++){		//WYPELNIANIE KONTENERA
		temp = (rand()%100)+1;
		kontener_int.wstaw(temp);
	}
	cout <<kontener_int;

Błąd:

Error 3 error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class lista<int> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$lista@H@@@Z) referenced in function _main

Gdzie jest błąd?

1 użytkowników online, w tym zalogowanych: 0, gości: 1