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
 
 » ulan 09:26
 » Katoda Lt 09:25
 » dugi 09:23
 » Artaa 09:17
 » @GUTEK@ 09:17
 » Master/Pe 09:16
 » Kenny 09:16
 » NWN 09:15
 » biEski 09:14
 » braveh 09:07
 » McMi21 09:06
 » PaKu 09:04
 » Mariosti 09:02
 » Chrisu 09:02
 » ham_solo 09:00
 » Sherif 08:58
 » ligand17 08:58
 » JE Jacaw 08:55
 » DJopek 08:54
 » m&m 08:51

 Dzisiaj przeczytano
 41115 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
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 :-)

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