【问题标题】:How to use polymorphism with classes from different header files?如何对来自不同头文件的类使用多态性?
【发布时间】:2011-12-12 09:08:05
【问题描述】:

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

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... 我该怎么办?为不同的继承类设置不同的标头是否明智,或者只是将它们放在“figure.h”中?因为我还会有皇后、主教等人物,这将产生相当多的标题和暗示。文件..

【问题讨论】:

  • 你说的金不认图是什么意思
  • 这应该可以,你可能在其他地方有错误。命名错误?

标签: c++ class inheritance header polymorphism


【解决方案1】:

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

更笼统地说,至于如何组织代码,没有人 确定的答案。就个人而言,在一种特殊情况下(其中 派生类的数量定义明确并严格限制),我会 可能会偷工减料并在Figure.h中定义所有这些,但是有 为每个使用单独的标题的很好的论据——如果 仅此而已,您不必包含个人的标题 图形,但在创建它们的文件中除外。另一种解决方案是 是对图形使用工厂函数,并定义派生的 实现工厂函数的源文件中的类。

【讨论】:

    【解决方案2】:

    您首先需要包含figure.h

    #include<Figure.h>
    
    class King : public Figure
    {
        ...
    };
    

    【讨论】:

    • 注意大小写,不是每个人都在windows上
    • 用户已经这样做了,请参阅“所以在 king.h 我做 #include “figure.h”,并为 ex 写:“
    【解决方案3】:

    检查编译器的包含路径。就像:-I"PATH_TO_DIR_WHERE_FIGURE_H_LOCATED",不带引号。

    【讨论】:

      【解决方案4】:

      确保king.h 包含#include "figure.h"#include &lt;figure.h&gt;,只要figure.h 位于与king.h 相同的文件夹中的包含路径上。如果您使用的是 Windows,则包含标头的大小写可能不正确。在其他所有方面,确保大小写正确。最后,如果Figure 的定义在命名空间内,则必须附加:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-16
        • 2020-12-25
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多