我在header中创建了class Figure: " Figure .h":
class Figure
{
Color color;
std::string position;
...
};
,我想在标题" King .h"中定义一个类King。在《国王》中,我是这样做的#include "figure.h"
,并写入示例:
class King : public Figure
{
char type;
bool checkIfTypeIsValid(std::string);
...
};
但这似乎不起作用,因为King不认识Figure…我该怎么办?为不同的继承类使用不同的头文件,或者只是把它们放在"figure.h"中,这是明智的吗?因为我将有一个女王,主教等人物,这将使相当多的头和暗示。文件. .
首先:您不能从未知的,甚至是部分已知的派生类。为了定义King
,必须首先包含Figure.h
(假设King
在另一个文件中定义)。
更一般地说,关于如何组织代码,没有人明确的答案。就我个人而言,在一个特殊的情况下派生类的数量有很好的定义和严格的约束)可能会走捷径并在Figure.h
中定义所有这些,但确实存在为每个—if使用单独的标头是很好的论据没有别的了,你不需要包含个人的标题除了在创建它们的文件中。另一个解决方案是将工厂函数用于图形,并定义派生函数在源文件中实现工厂函数的类
首先需要包含figure.h
。
#include<Figure.h>
class King : public Figure
{
...
};
检查编译器的包含路径。它就像:-I"PATH_TO_DIR_WHERE_FIGURE_H_LOCATED",不带引号。
确保king.h
包含#include "figure.h"
或#include <figure.h>
,只要figure.h
与king.h
在同一文件夹的包含路径上。如果你在Windows上,include头可能有不正确的大小写。在其他方面,确保案例是正确的。最后,如果Figure
的定义在名称空间内,则必须附加:
class King : public some_namespace::Figure
{
//....
};