in set klasse vector verwenden, problem



  • Hi ihr,

    ich versuche mich grad an templates und klassen, und habe nun ein problem:

    tvector.h

    //---------------------------------------------------------------------------
    
    #ifndef tvectorH
    #define tvectorH
    
    //---------------------------------------------------------------------------
    
    template<class T>
    class tvector
    {
     public:
      tvector(int size)                     //Konstruktor um Feld anzulegen
      {
       m_size=size;
       m_data = new T[m_size];
      }
    
      tvector(const tvector& tv)            //Copy-Konstruktor
      {
        m_size=tv.m_size;
        m_data = new T[m_size];
        for(int i=0;i<m_size;i++)
         m_data[i]=tv.m_data[i];
      }
    
      ~tvector()                            //Destruktor löscht Feld
      {
       delete[] m_data;
      }
    
      T size() {return m_size;}           //Gibt aktuelle Größe zurück
    
      T& operator[](int index)            //Gibt Daten an Indexposition zurück
      {
       assert(index>=0);
       assert(index<m_size);
       return m_data[index];
      }
    
      tvector& operator=(const tvector& tv)
      {
        if(this!=&tv)
        {
        m_size=tv.m_size;
        delete[] m_data;
        m_data = new T[m_size];
        for(int i=0;i<m_size;i++)
         m_data[i]=tv.m_data[i];
        }
        return *this;
      }
     private:
      T* m_data;
      int  m_size;
    
      void Grow(int newSize)                //um neues größeres Array anzulegen
      {
       T *temp = new T[m_size];
       for(int i=0;i<m_size;i++)
        temp[i]=m_data[i];
       m_data = new T[newSize];
    
       for(int i=0;i<m_size;i++)
        m_data[i]=temp[i];
    
       m_size=newSize;
       delete[] temp;
    
      }
    };
    #endif
    

    tset.h

    //---------------------------------------------------------------------------
    
    #ifndef tsetH
    #define tsetH
    class tset
    {
     public:
      tset():m_data(10){m_size=0;}
    
     private:
      tvector<int> m_data;
      int m_size;
    
    };
    
    //---------------------------------------------------------------------------
    #endif
    

    Fehler:

    [C++ Fehler] tset.h(11): E2303 Typname erwartet
    [C++ Fehler] tset.h(11): E2139 In Deklaration fehlt ;
    [C++ Fehler] tset.h(8): E2312 'm_data' ist keine eindeutige Basisklasse von 'tset'
    

    wo liegt denn mein fehler, irgendwie seh ichs net!



  • #include "tvector.h"
    

    an den Anfang von tset.h



  • hm...hatte das in der tset.cpp eingebunden!

    Also muss ich das auch explizit in der tset.h machen?!



  • Klar, wenn du das Template verwendest.


Anmelden zum Antworten