[C++]Combinatie van templates en classes, werkt niet.

Status
Niet open voor verdere reacties.

tidob1

Gebruiker
Lid geworden
20 jun 2009
Berichten
5
Hallo allemaal,

Ik ben al een tijdje met C++ bezig, en wilde iets nieuws uitproberen. Ik weet al redelijk wat van classes, en een beetje van templates. Nu wilde ik deze 2 gaan combineren:
Code:
template <class T>
class Dier
{
     private:
             int ID=4;
     public:
             Dier(T soort) {T temp=new T(soort);}
};

template <class T>
class Hond
{
     private:
             int Gewicht=50;
     public:
             Hond(T ras) {T temp=new T(ras);};
};

template <class T>
class Vogel
{
     public:
             Vogel(T ras) {T temp=new T(ras);};
};

template <class T>
class JackRussel
{
     private:
             char Naam[25];
     public:
             JackRussel(char n[25]) {Naam=n;};
};

template <class T>
class Roodborstje
{
     private:
             char Naam[25];
     public:
             Roodborstje(char n[25]) {Naam=n;}
};
Het idee hierachter is:
  • Er is een class genaamd 'Dieren'. Als je hier een object van aanmaakt, dan moet je ook de soort (Hond of Vogel) opgeven.
  • Als je Hond opgeeft, moet je ook een ras opgeven (nu kun je alleen nog maar JackRussel opgeven). Hetzelfde geldt voor vogel (maar dan met Roodborstje).
  • Ieder Dier heeft een ID.
  • Iedere Hond heeft een Gewicht.
  • Iedere JackRussel en ieder Roodborstje heeft een Naam.

Dus je zou bij de constructor, dit moeten opgeven: de soort (hond/vogel), het ras (jackrussel/roodborstje) en de naam. Alleen, hoe moet je die dingen opgeven? Hoe kun je deze classes nu gebruiken?
Over het aanmaken van de private-variabelen (ID en Gewicht) krijg ik deze errors:
Code:
ISO C++ forbids initialization of member `ID' making `ID' static
ISO C++ forbids in-class initialization of non-const static member `ID'
Als ik de variabelen van int verander naar const static int, dan is de error weg, maar is er verder niets veranderd, geloof ik.

Nu krijg ik dus eindelijk geen errors meer, maar nu komt het aanmaken van objecten nog. Ik probeerde een aantal codes, en op aanwijzing van alle errors die tevoorschijn kwamen, kwam ik op deze code (waar geen errors van komen):
Code:
Dier<class T> Hoi(T Hond);
Maar als ik 'T Hond' weglaat (dus niets tussen de haakjes), dan doet hij het ook, en ik weet niet van welke classes er objecten worden gemaakt. Als ik na deze code dit doe:
Code:
cout << Hoi.Gewicht;
//of:
cout << Hoi.ID;
Dan krijg ik een error. Dat verwachtte ik ook wel, want Gewicht en ID zijn tenslotte private. Maar ik kreeg een hele andere error:
Code:
request for member `Gewicht' in `Hoi', which is of non-class type `Dier<T> ()(T)'

Weet iemand hoe ik nu op de juiste manier(en) een object aan kan maken, en hoe ik dat kan gebruiken?


Alvast bedankt (o.a. voor het lezen van dit lange bericht),

Tidob1
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan