Wpis z mikrobloga

#programowanie #cpp

No elo. Mam dla Was kolejną programistyczną zagadkę. Do rzeczy:

Oto nagłówek szablonu klasy dziedziczącej po vectorze (tak, wiem że to zły pomysł, ale to nie jest temat na tę dyskusję).

-------------------------------------------------------------------

#ifndef _OBJECTS_H

#define _OBJECTS_H

#include

#include "Global.h"

template

class Objects : public std::vector

{

public:

Objects();

```T GetObjectByID(int32_t value); private:int ID;std::string name;typedef typename vector::const_iterator iterator;```

};

#endif

--------------------------------------------------------------------

No i definicje metod:

-------------------------------------------------------------------

#include "../Include/Objects.h"

template

Objects::Objects()

{

// bla bla bla

}

template

T Objects::GetObjectByID(int32_t value)

{

for(iterator it = begin(); it != end(); ++it)

{

if((*it)->GetID() == value)

{

return *it;

}

}

return nullptr;

}

-------------------------------------------------------------------

W czym problem? W tym że pomimo że dziedziczę z vectora, kompilator nie widzi metod begin() i end(). Wcześniej ta klasa obsługiwała jeden, sztywny typ, i wszystko działało. Niestety po zmianie na szablon, jest problem. Wie ktoś jak to rozwiązać? :P

BTW. Podobny problem znalazłem tutaj, ale bez rozwiązania. http://bytes.com/topic/c/answers/480571-inherit-vector-class
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@bartoneczek: Tak czy inaczej, nawet gdyby to była nowość w C++11, nie ma sensu ƶebyś pierw się uczył starszych, gorszych metod, a dopiero potem przechodził do nowszych.
  • Odpowiedz