尝试在它们自己的头文件中编译这两个类(Army和General)时遇到问题:

#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




#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


我曾尝试在Army.h中声明WarriorGeneral,但这似乎不起作用,也许是因为它是模板实例?无论如何,我在上述版本中遇到的错误是此类错误和相关问题中的几个:

Army.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int


它们甚至不是未解决的链接器问题...注意,我将WarriorGeneral的typedef放在General.h文件中。我不知道这是否正确。有什么可以做的使这项工作吗?

提前致谢!

最佳答案

我不知道Army.h第21行是什么,因为您发布的那行没有那么多行。我可以看到的唯一未在该标头中声明的是UnitList。它是正确的前向声明还是标头包括您没有向我们展示?

generalbase.hWarrior.h是否包含Army.h?如果是这样,那将导致看似循环的包含。尝试让它不执行include而是转发声明Army

10-04 12:33