В вашем исходном коде, где main
(скажем, main.cpp
), у вас, вероятно, есть
#include "GreenTile.h" // (1)
#include "VanillaTile.h" // (2)
и в каждом из этих заголовков у вас есть
#include "Tile.h"
Если в вашем Tile.h
нет охранников, вы включаете дважды определение класса Tile
. Ваш Tile.h должен выглядеть так:
#ifndef TILE_H
#define TILE_H
class Tile
{
...
};
#endif
Препроцессор копирует содержимое заголовков (1) и (2) в начале main.cpp
. С ними он копирует дважды Tile.h
, но из-за этих охранников остается только содержимое первого экземпляра. Таким образом, компилятор не жалуется, поскольку видит единственное определение класса Tile
.