如何将多态性与来自不同头文件的类一起使用?

时间:2011-12-12 09:08:05

标签: c++ class inheritance header polymorphism

我的标题“figure.h”中有类图:

class Figure
{
    Color color;
    std::string position;
    ...
};

我想在标题“king.h”中定义一个类King。所以在king.h我做 #include "figure.h",并写为ex:

class King : public Figure
{
     char type;
     bool checkIfTypeIsValid(std::string);
     ...
};

但这似乎不起作用,因为King不承认图......我该怎么办?对于不同的继承类有不同的标题,或者只是将它们放在“figure.h”中是否很明智?因为我会有一个女王,主教等人物,这将产生相当多的标题和impl。文件..

4 个答案:

答案 0 :(得分:0)

首先:你不能从一个未知的,甚至是部分已知的 类。要定义King,您必须先包含Figure.h (假设King在不同的文件中定义)。

更一般地说,关于如何组织代码,没有人 明确的答案。就个人而言,在一个特定的情况下(其中 我知道派生类的数量是明确定义的并且是严格约束的 可能会在Figure.h中偷工减料并定义所有这些,但也有 为每个if使用单独的标头的非常好的参数 没有别的,你不必包括个人的标题 除了创建它们的文件之外的数字。另一种解决方案 是为数字使用工厂函数,并定义派生 源文件中实现工厂函数的类。

答案 1 :(得分:0)

您首先需要包含figure.h

#include<Figure.h>

class King : public Figure
{
    ...
};

答案 2 :(得分:0)

检查编译器的包含路径。它就像:-I“PATH_TO_DIR_WHERE_FIGURE_H_LOCATED”,没有引号。

答案 3 :(得分:0)

确保king.h包含#include "figure.h"#include <figure.h>,只要figure.h位于与king.h相同的文件夹中的包含路径中。如果您使用的是Windows,则包含标头可能包含错误的大小写。在其他一切,确保案件是正确的。最后,如果Figure的定义在命名空间内,则必须附加:{/ p>

class King : public some_namespace::Figure
{
   //....
};