头文件导入行为奇怪

时间:2013-01-07 19:42:34

标签: c++

  

可能重复:
  Circular dependencies with headers. Using #ifndef and #define

我尝试导入一个头文件,其中包含一个扩展到该头文件中的类的类,但它不起作用:S

TileGrass.h:

#ifndef TILEGRASS_H_
#define TILEGRASS_H_

#include "Tile.h"

class TileGrass : public Tile
{
    public:
        TileGrass(unsigned char);
};

#endif /* TILEGRASS_H_ */

Tile.h:

#ifndef TILE_H_
#define TILE_H_

class Tile
{
    public:
        Tile(unsigned char);
        unsigned char id;
};

#include "TileGrass.h"

extern Tile* tiles[256];
TileGrass tileGrass = TileGrass(0);

#endif /* TILE_H_ */

这样做会给我一个错误: 错误:'TileGrass'没有命名类型

1 个答案:

答案 0 :(得分:1)

乍一看,我看到两个错误:

  • 不需要的循环包含(Tile.h不需要包含TileGrass.h - 您只需重新整理文件即可删除包含)
  • TileGrass tileGrass = TileGrass(0);是一个定义,它位于标题中,因此如果多次包含标题,则会出现多重定义错误。如果您想要全局(重新考虑),则必须使用extern