Je vais avoir un problème lorsque vous essayez de compiler ces deux classes (Armée et générales) dans leurs propres fichiers d'en-tête:inclusion à deux voies de classes et instances de modèle
#ifndef ARMY_H
#define ARMY_H
#include "definitions.h"
#include "UnitBase.h"
#include "UnitList.h"
#include "General.h"
class Army
{
public:
Army(UnitList& list);
~Army(void);
UnitBase& operator[](const ushort offset);
const UnitBase& operator[](const ushort offset) const;
const uint getNumFightUnits() const;
const ushort getNumUnits() const;
const General<Warrior>* getWarrior() const;
private:
UnitBase** itsUnits;
uint itsNumFightUnits;
ushort itsNumUnits;
WarriorGeneral* itsGeneral;
};
#endif
et
#ifndef GENERAL_H
#define GENERAL_H
#include "generalbase.h"
#include "Warrior.h"
class Army;
template <class T>
class General : public GeneralBase, public T
{
public:
General(void);
~General(void);
void setArmy(Army& army);
const Army& getArmy() const;
private:
Army* itsArmy;
};
typedef General<Warrior> WarriorGeneral;
#endif
J'ai essayé de déclarer WarriorGeneral dans Army.h, mais cela ne semble pas fonctionner, peut-être parce que c'est une instance de template? Quoi qu'il en soit, les erreurs que je reçois avec la version ci-dessus sont plusieurs de ce genre et les problèmes connexes:
Army.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Ils ne sont pas même des problèmes non résolus de l'éditeur de liens ... Notez que je mets le typedef de WarriorGeneral dans le général. h fichier. Je ne sais pas si c'est correct. Y at-il quelque chose qui peut être fait pour que cela fonctionne?
Merci d'avance!
Une chose que je voudrais vous dire est que les destructeurs ne peuvent pas prendre même le «vide» comme argument. Donc '~ Army (void);' et '~ General (void);' sont illégaux. EDIT: Veuillez poster le code complet. –
Quelle est la ligne 21? –
Est-ce que UnitList a été déclaré? –