Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » metacom 22:02
 » m&m 22:00
 » Dhoine 21:58
 » zeb 21:58
 » dida 21:56
 » bodeq 21:56
 » rainy 21:55
 » cVas 21:46
 » piszczyk 21:34
 » Marian30p 21:33
 » Kool@ 21:30
 » DYD 21:22
 » @GUTEK@ 21:22
 » ReMoS 21:20
 » myszon 21:16
 » Master/Pe 21:12
 » biEski 21:08
 » Visar 20:54
 » Fl@sh 20:53
 » Logan 20:46

 Dzisiaj przeczytano
 19964 postów,
 wczoraj 27057

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2025
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 :-)

  1. mozesz wkleic... , Tummi 14/12/02 01:58
    tresc klasy i error z kompilatora?

    T.

    www.skocz.pl/uptime :D

    1. 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 :-)

  2. 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-2025, TwojePC.PL