Problem Template adden Liste und Array



  • Hei zusammen.

    Also ich hab folgendes:

    template <typename T>
            class List {
    
            public:
    
                List();
                List(const List & orig);
                virtual ~List();
    
                List & add(const T & t);
                List & add(const List<T> & tList);
                List & add(const T[] & tArray);
    

    mein problem ist jetz, dass ich einmal eine liste zu meiner Liste adden will und einmal ein Array. Bei der Array-Methode meckert der Compiler "unable to resolve identifier tArray"

    Woran könnte das liegen?

    Danke,
    strahli



  • Weil Du versuchst, Java zu programmieren 😉

    Entweder

    List & add(const T* tArray, size_t laenge);
    

    Oder

    template<size_t N> List& add(const T (&array)[N]);
    

    Letzteres funktioniert nur, wenn es sich um ein echtes, nicht zu einem Pointer verkümmertes Array handelt.



  • ... oder evtl.

    List & add(const std::vector< T >& tArray);
    

    ?



  • Schau dir mal an, wie C++ das macht, Stichwort insert von std::vector .



  • LordJaxom schrieb:

    Weil Du versuchst, Java zu programmieren 😉

    List & add(const T* tArray, size_t laenge);
    

    dankeschön - funktioniert jetz 🙂



  • LordJaxom schrieb:

    Weil Du versuchst, Java zu programmieren 😉

    Entweder

    List & add(const T* tArray, size_t laenge);
    

    Und du versuchst, C zu programmieren? 😉

    template<class Iterator>
      List& add(Iterator first, Iterator last)
      {
        std::for_each(first, last, [this](T const& t){add(t);});
      }
    
    // ...
    
      std::vector<T> tvec;
      T array[N];
      std::list<T> tlist;
    
      List myList;
      myList.add(std::cbegin(tvec), std::cend(tvec));
      myList.add(std::cbegin(array), std::cend(array));
      myList.add(std::cbegin(tlist), std::cend(tlist));
    


  • strahli schrieb:

    List();
                List(const List & orig);
                virtual ~List();
    

    Warum ist der Destruktor virtuell? Und du hast den Zuweisungsoperator vergessen.

    Im Übrigen, falls es um Produktivcode geht, benutze bestehende Implementierungen wie std::list . Zum Lernen ist eine selbstgeschriebene Liste aber ganz nützlich.


Anmelden zum Antworten