TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
Problemik z C++ , Master/Pentium 14/12/02 01:45 Otoż mam problem z utworzeniem wzorca klasy. Robię wszystko tak jak w książce , i tak utworzona klasa działa dopuki nie spróbuję jej użyć. Dopiero wtedy następuje błąd kompilacji. Ma może ktoś zrozumiałe materiały na ten temat. Klasa w wersji pierwotnej (bez szablonu) działa bez zarzutu.Nie ma tego złego , co by się w gorsze
obrócić nie mogło - jak nie wierzysz
włącz komputer :-) - mozesz wkleic... , Tummi 14/12/02 01:58
tresc klasy i error z kompilatora?
T.www.skocz.pl/uptime :D - mogę :) , Master/Pentium 14/12/02 10:57
template <class Wzorzec> //parametryzacja (generowanie szablonu
class Zbior {
private:
int ilosc; //ilosc elementow w zbiorze
typedef struct a{
Wzorzec wartosc;
struct a *nastepny;
}element;
// to jest pojedynczy element zbioru (deklaracja inline)
element *start; //wskaznik na pierwszy element zbioru
element *koniec; //wskaznik na ostatni element
public:
Zbior();
~Zbior();
Zbior(Zbior &wzor); //konstruktor kopii
int podaj_rozmiar() const; //funkcja to zwraca rozmiar zbioru
int dodaj_element(Wzorzec); //dodaje element do zbioru
void wyswietl_wszystko() const; //ta wyswietla wszystkie elementy ze zbioru
Zbior &operator=(const Zbior &); //przeciazenie operatora =
Zbior operator+ (const Zbior &); //przeciazenie + (tutaj suma zbiorow)
Zbior operator/ (const Zbior &); //przeciazenie + (tutaj czesc wspolna zbiorow)
};
konstruktor to:
template <class Wzorzec>
Zbior<Wzorzec>::Zbior()
{
ilosc=0;
start=NULL;
koniec=NULL;
//inicjalizacja pustego zbioru
}
destruktor to:
template <class Wzorzec>
Zbior<Wzorzec>::~Zbior()
{
int licznik;
element *wskaznik=start; //tymczasowy wskaznik do kolejnych elementow
for(licznik=1;licznik<=ilosc;licznik++)
{
start=wskaznik;
wskaznik=wskaznik->nastepny;
delete start; //kasujemy element
//i przesuniecie na nastepna pozycje
}
start=NULL;
koniec=NULL;
ilosc=0;
// delete this;
}
zaś wywołanie elementu w sposób pierwotny czyli:
Zbior<float> zbior1;
powoduje błąd podczas kompilacji:
main.cpp:30: undefined reference to `Zbior<float>::Zbior[in-charge]()'
main.cpp:31: undefined reference to main.cpp:53: undefined reference to `Zbior<float>::~Zbior [in-charge]()'
zaś wywołanie zmienione na:
Zbior<float> zbior1(); (a klasa nie ma argumentów)
daje wynik taki, że konstruktory niby działają ale inne składowe klasy nadal nie, np w taki sposób:
main.cpp:31: request for member `dodaj_element' in `zbior1()', which is of non-aggregate type `Zbior<float> ()()'
main.cpp:42: cannot convert `Zbior<float> ()()' to `Zbior<float> ()()' in assignment (to przy operatorze =)
Pomocy bo wyczerpałem już wszystkie swoje wiadomości a to nadal nie działa. Kompilator to Kdevelop pod Mandrake 9.0 , raczej nie on szczytem marzeń ale do tej pory działał. Czyżby był jednak trefny ?Nie ma tego złego , co by się w gorsze
obrócić nie mogło - jak nie wierzysz
włącz komputer :-)
- już sobie poradziłem , Master/Pentium 14/12/02 19:44
oprócz paru małych pomyłek w kodzie w głównym pliku zadeklarowałem plik nagłówkowy klasy a nie ją samą (*.h zamiast *.cpp). Po zmianie poszło. Ciekawe, że bez wzorców chodziło. Pod dosowym Borlandem generowało też błędy - tylę , że inne i w innych miejscach. Ech te pomyłki.Nie ma tego złego , co by się w gorsze
obrócić nie mogło - jak nie wierzysz
włącz komputer :-) |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|