Pereiti prie turinio

C++ templates problemėlė


Rekomenduojami pranešimai

Tai vat, niekaip nesuprantu kame reikalas:

header:

#ifndef SARASAS_H
#define SARASAS_H

#include <iostream>
#include <string>

using namespace std;

template <class T>
class Sarasas
{
private:
struct node {
	T data;
	node *next;
}*list;

public:
Sarasas();
void add(T data);
T get(int n);
bool isEmpty();
int getCount();
void print();
~Sarasas();
};
#include "sarasas.cpp"
#endif

 

#ifndef SARASAS_CPP
#define SARASAS_CPP

#include "sarasas.h"
...
template <class T>
T Sarasas<T>::get(int n)
{
int i = 0;
T temp = T();
node *head;
head = list;
while(!isEmpty())
{
	if(i == n)
	{
		temp = list->data;
	}
	else
	{
		list = list->next;
	}
	i++;
}
list = head;
return temp;
}
...

ir paprastutis main.cpp testavimui

#include "main.h"

int main()
{
Sarasas<int> s1;   //int sarasas
Sarasas< Sarasas<int> > ss;  //listception :D
s1.add(1);
s1.add(2);
s1.add(13);
s1.add(13123);
s1.add(1);
s1.add(2);
s1.add(1);
s1.add(2);
s1.add(13);
s1.add(13123);
s1.add(13);

cout << "getCount(): "<<s1.getCount()<<endl;  //veikia
cout << "is empty: " << s1.isEmpty()<<endl;   //veikia
cout << "get(1): "<<s1.get(0) <<endl;         //veikia
cout << "get(10): "<<s1.get(10) <<endl;       //veikia
ss.add(s1);
cout << "ss count:" << ss.getCount() <<endl;  //veikia
Sarasas<int> s2;
s2 = ss.get(0);
cout << s2.get(3)<<endl;              //cia jau pradeda sh malt, linux'e tiesiog random skaiciu rodo (lyg kintamajam nebuvo priskirta pradine reiksme), o visual studio sitoj vietoj tiesiog error meta
}

 

Testuojant list'a su paprastais int viskas puikiai veikia, bet pabandzius ta sarasa sukist i kita ir atgal ji istraukt ir su get() gauti bent viena int elementa prasideda problemos. :(

Tikiuosi supratot ka norejau pasakyt ^_^

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, kad lyg ne :| Su primityviais tipais viskas gerai

template <class T>
void Sarasas<T>::add(T data)
{
node *naujas,*temp;
if(list==NULL) //tuscias
{
	list->data = data;
	list->next = NULL;
}
else
{
	temp = list;
	while(temp->next != NULL)
		temp = temp->next;
	naujas->data = data;
	naujas->next = NULL;
	temp->next = naujas;
}
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...