我正在开发国际象棋逻辑,以便创建一个游戏(它尚无可视界面),我有一个项目,该项目包含两个文件夹:带有.cpp文件的src/
和带有标题的include/
。这两个文件夹有一个相似的chessmen
,分别带有源文件和头文件。这些文件包含从具有模板构造函数的“模式”类Chessman
继承的类:
Chessman.h:
class Chessman {
protected:
Chessman_TYPE type;
public:
template <typename Chessman_TYPE>
static Chessman *createChessman();
};
Chessman.cpp:
template <typename Chessman_TYPE>
Chessman *Chessman::createChessman() {
Chessman *chessman;
chessman = new Chessman_TYPE;
return chessman;
}
其中Chessman_TYPE
是枚举。
在其他文件中使用它后,它无法编译:
undefined reference to 'Chessman* Chessman::createChessman<Pawn>()'
我在这里使用它(字段是* Chessman指针的数组):
Field[1][1] = Chessman::createChessman <Pawn> ();
编译时,我使用g++ -o out src/*.cpp src/chessmen/*.cpp
每个.cpp文件都有其自己的标头。出于某些原因(尽管他们有#ifndef东西),每个Chessman.h中都包含了每个象棋手,每个Chessman.h中都包含了Chessman.h