Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C++, retezec

Dobrý den, mám problém, podle knížky Naučte se programovat za 21 dní jsem sestavil tento kód, ale když ho chci zkompilovat vyhodí to chybu: Linker error, kdyby byl někdo tak hodnný a řekl mi v čem mám chybu a jak jí odstranit, byl bych rád, Děkuji.
Kód zde:

#include <iostream>
#include <string>
using namespace std;

class Retezec
{
      public:
             Retezec();                                                         //Konstruktory
             Retezec(const char* const);
             Retezec(const Retezec&);
             ~Retezec();
             
             char & operator[] (unsigned short Odsazeni);                       //Pretizene operatory
             char operator[] (unsigned short Odsazeni) const; 
             
             Retezec & operator= (const Retezec&);
             Retezec operator+ (const Retezec&);
             void operator+= (const Retezec&);
             
             unsigned short PrevzitDelku() const {return DelkaRetezce;}         //Pristupove metody
             const char* PrevzitRetezec() const {return TenRetezec;}
             
      private:
              Retezec (unsigned short);                                         //Soukromy konstruktor
              
              char* TenRetezec;
              unsigned short DelkaRetezce;
};

Retezec::Retezec()                                                              //Vychozi konstruktor vytvori retezec o delce 0 bajtu
{             
              TenRetezec = new char[1];
              TenRetezec[0] = '\0';                                             //Hodnota NULL
              DelkaRetezce = 0;
}

Retezec::Retezec(unsigned short Pocet)                                       //Soukromy konstruktor pro metody tridy, vytvori novy retezec
{                                                                               //o zadane delce, je naplneny NULLami
                       TenRetezec = new char[Pocet+1];
                       for(unsigned short i=0; i<=Pocet; i++)
                       {
                                    TenRetezec[i] = '\0';
                       }
                       DelkaRetezce = Pocet;
}

Retezec::Retezec(const char* const cRetezec)                                    //Prevede znakove pole na retezec
{
                       DelkaRetezce = strlen(cRetezec);
                       TenRetezec = new char[DelkaRetezce+1];
                       for(unsigned short i=0; i<=DelkaRetezce; i++)
                       {
                                    TenRetezec[i] = cRetezec[i];
                       }
                       TenRetezec[DelkaRetezce] = '\0';
}

Retezec::Retezec(const Retezec & copy)                                          //Konstruktor pro kopirovani
{
                       DelkaRetezce = copy.PrevzitDelku();
                       TenRetezec = new char [DelkaRetezce+1];
                       for(unsigned short i=0; i<=DelkaRetezce; i++)
                       {
                                    TenRetezec[i] = copy[i];
                       }
                       TenRetezec[DelkaRetezce] = '\0';
}

Retezec::~Retezec()                                                              //Destruktor, uvolni zabranou pamet
{
                       delete[] TenRetezec;
                       DelkaRetezce = 0;
}

Retezec& Retezec::operator=(const Retezec &copy)                                //Operator prirazeni priradi potrebnou pamet a 
{                                                                               //a zkopiruje delku retezce a retezec
                       if(this == &copy)
                       {
                               return *this;
                       }
                       delete[] TenRetezec;
                       DelkaRetezce = copy.PrevzitDelku();
                       TenRetezec = new char[DelkaRetezce+1];
                       
                       for(unsigned short i=0; i<DelkaRetezce; i++)
                       {
                                    TenRetezec[i] = copy[i];
                       }
                       TenRetezec[DelkaRetezce] = '\0';
                       return *this;
}

char& Retezec::operator[] (unsigned short Odsazeni)                             //Nekonstatni operator odsazeni vraci odkaz na znak,
{                                                                               //aby jej bylo mozno zmenit
                       if(Odsazeni > DelkaRetezce)
                                return TenRetezec[DelkaRetezce-1];
                       else
                                return TenRetezec[Odsazeni];
}

Retezec Retezec::operator+ (const Retezec& copy)                                //Vytvari novy retezec pridanim aktualniho k copy
{
                       unsigned short CelkovaDelka = DelkaRetezce + copy.PrevzitDelku();
                       Retezec Docasny(CelkovaDelka);
                       
                       unsigned short i;
                       for(i=0; i<DelkaRetezce; i++)
                       {
                                    Docasny[i] = TenRetezec[i];
                       }
                       
                       for(unsigned short j=0; i<CelkovaDelka; i++, j++)
                       {
                                    Docasny[i] = copy[j];
                       }
                       Docasny[CelkovaDelka] = '\0';
                       return Docasny;
}

void Retezec::operator+= (const Retezec& copy)
{
                       unsigned short copyDelka = copy.PrevzitDelku();
                       unsigned short CelkovaDelka = DelkaRetezce + copyDelka;
                       
                       Retezec Docasny(CelkovaDelka);
                       
                       unsigned short i;
                           for(i=0; i<DelkaRetezce; i++)
                       {
                                    Docasny[i] = TenRetezec[i];
                       }
                       
                       for(unsigned short j=0; i<copy.PrevzitDelku(); i++, j++)
                       {
                                    Docasny[i] = copy[j-DelkaRetezce];
                       }
                       Docasny[CelkovaDelka] = '\0';
                       *this = Docasny;
}

int main()
{
    Retezec Prvni("Prvni test");
    cout << "Prvni retezec:\t" << Prvni.PrevzitRetezec() << endl;
    
    char *Docasny = "Ahoj Svete";
    Prvni = Docasny;
    cout << "Prvni retezec:\t" << Prvni.PrevzitRetezec() << endl;
    
    char DocasnyDve[20];
    strcpy(DocasnyDve, ";Programovani");
    Prvni += DocasnyDve;
    
    cout << "DocasnyDve:\t" << DocasnyDve << endl;
    cout << "Prvni:\t" << Prvni.PrevzitRetezec() << endl;
    
    cout << "Prvni[4]:\t" << Prvni[4] << endl;
    Prvni[4] = 'x';
    cout << "Prvni:\t" << Prvni.PrevzitRetezec() << endl;
    
    cout << "Prvni[999]:\t" << Prvni[999] << endl;
    
    Retezec Druhy("Druhy retezec");
    Retezec Treti;
    
    Treti = Prvni + Druhy;
    
    cout << "Treti:\t" << Treti.PrevzitRetezec() << endl;
    
    Retezec Ctvrty;
    Ctvrty = "Funguje to?";
    
    cout << "Ctvrty:\t" << Ctvrty.PrevzitRetezec() << endl;
    
    cin.get();
    return 0;
}
Předmět Autor Datum
Chýba ti tam implementácia metódy: char Retezec::operator[] (unsigned short Odsazeni) const Ten lin… poslední
los 13.11.2011 22:05
los

Zpět do poradny Odpovědět na původní otázku Nahoru