Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem c++ Propojene pole

Dobry den, zase ja :)
Udelal sem podle knizky propojene pole, jenze v jenom uzlu mam problem, funkce Uzel * UzelHlavy::Vlozit(Data *TaData) vraci this ale vyhodi mi to chybu:

129. D:\MY\Software\Dev-Cpp\Propojenyseznam.cpp cannot convert `UzelHlavy* const' to `Uzel*' in return
 
Celý kód je zde, Děkuju jestli se na to někdo podívá a pomůže:
#include <iostream>
using namespace std;

enum{xJeMensi, xJeVetsi, xSeRovna};

class Data
{
      public:
             Data(int Hodnota):MojeHodnota(Hodnota) {}
             ~Data() {}
             
             int Porovnat(const Data &);
             void Zobrazit() const { cout << "Hodnota je " << MojeHodnota << endl;}
             
      private:
              int MojeHodnota;
};

int Data::Porovnat(const Data & JinaData)
{
    if(MojeHodnota < JinaData.MojeHodnota)
                   return xJeMensi;
    
    if(MojeHodnota > JinaData.MojeHodnota)
                   return xJeVetsi;
    
    else
                   return xSeRovna;
                   
}
    
class Uzel;                                                                     //Deklarace
class UzelHlavy;
class UzelOcasu;
class VnitrniUzel;

class Uzel
{
      public:
             Uzel(){}
             virtual ~Uzel(){}
             virtual Uzel *Vlozit(Data *TaData) = 0;
             virtual void Zobrazit();
      
      private:
};
                                     
class VnitrniUzel : public Uzel                                                 //Uzel, obsahuje vlastni objekt(Data), viz. kapitola Sablony
{
      public:
             VnitrniUzel(Data *TaData, Uzel *Dalsi);
             ~VnitrniUzel() {delete MujDalsi; delete MojeData;}
             
             virtual Uzel *Vlozit(Data *TaData);
             virtual void Zobrazit() {MojeData -> Zobrazit();                   //Delegovat
                                      MujDalsi -> Zobrazit();}
      private:
              Data *MojeData;                                                   //Samotna Data
              Uzel *MujDalsi;                                                   //Ukazatel na dalsi Uzel v propojenem seznamu
};

VnitrniUzel::VnitrniUzel(Data *TaData, Uzel *Dalsi):MojeData(TaData),           //Konstruktor inicalizuje Hodnoty
                                                    MujDalsi(Dalsi)
{
}

Uzel *VnitrniUzel::Vlozit(Data *TaData)                                         //Zaklad propojeneho seznamu, posila data dal
{
     int Vysledek = MojeData -> Porovnat( *TaData);                             //Je vetsi nebo mensi nez ja?
     
     switch(Vysledek)
     {                                                                          //Je-li stejny jako ja, pak patri prede me
                     case xSeRovna:                                             //Projit Dal
                     case xJeVetsi:                                             //Nova Data patri prede me
                     {
                          VnitrniUzel *DatovyUzel = new VnitrniUzel(TaData, this);
                          return DatovyUzel;
                     }
                     case xJeMensi:                                             //Predame Data dalsimu uzlu, at se stara on 
                          MujDalsi = MujDalsi -> Vlozit(TaData);
                     
                     return this;
     }
     
     return this;                                                               //Naplnit MSC
}

class UzelOcasu : public Uzel
{
      public:
             UzelOcasu() {}
             ~UzelOcasu() {}
             
             virtual Uzel *Vlozit(Data *TaData);
             virtual void Zobrazit() {}
      
      private:
              
};

Uzel *UzelOcasu::Vlozit(Data *TaData)                                           //Kdyz se ke me neco dostane, jde to prede me
{                                                                               //Protoze ja jsem ocas, za mnou uz nic neni!
     VnitrniUzel *DatovyUzel = new VnitrniUzel(TaData, this);
     return DatovyUzel;
}

class UzelHlavy                                                                 //UzelHlavy neobsahuje data, jen ukazuje na 1. misto v seznamu
{
      public:
             UzelHlavy();
             ~UzelHlavy() {delete MujDalsi;}
             
             virtual Uzel *Vlozit(Data *TaData);
             virtual void Zobrazit() {MujDalsi -> Zobrazit();}
      
      private:
              Uzel *MujDalsi;
};

UzelHlavy::UzelHlavy()                                                          // Kdyz se vytvori Hlava, vytvori se i Ocas
{
                      MujDalsi = new UzelOcasu;
}
                     

Uzel * UzelHlavy::Vlozit(Data *TaData)                                          //Pred Hlavou nic neni, data se jen poslou dal
{
     MujDalsi = MujDalsi -> Vlozit(TaData);
     return this;
}

class PropojenySeznam                                                           //Nic nedela, ale bez nej by to neslo...
{
      public:
             PropojenySeznam();
             ~PropojenySeznam() {delete MojeHlava;}
             void Vlozit(Data *TaData);
             void ZobrazitVse() {MojeHlava -> Zobrazit();}
      
      private:
              UzelHlavy *MojeHlava;
};

PropojenySeznam::PropojenySeznam()                                              //Novy seznam vytvori novou hlavu, ta vytvori ocas
{                                                                               //seznam je jinak prazdny
                                  MojeHlava = new UzelHlavy;
}

void PropojenySeznam::Vlozit(Data *pData)
{
     MojeHlava -> Vlozit(pData);
}


     /* Testovaci Program */

int main()
{
    Data *pData;
    int Hodnota;
    
    PropojenySeznam ps;
    
    for(true;;)                                                                 //Pozada uzivatele o zadani dat a prida je do seznamu
    {
               cout << "Zadejte hodnotu (0 = Konec): ";
               cin >> Hodnota;
               
               if(!Hodnota)
                    break;
               
               pData = new Data(Hodnota);
               ps.Vlozit(pData);
    }
    
    ps.ZobrazitVse();                                                           //Projit seznamem a zobrazit data
    
    cin.get();
    return 0;                                                                   //ps vypadne z oboru platnosti
}
    
               
             

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny