簡體   English   中英

如何對來自不同頭文件的類使用多態?

[英]How to use polymorphism with classes from different header files?

我的頭文件“ 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”中,是否明智? 因為我還將有一個Queen,Bishop等人物,這將產生很多標題和隱含的內容。 文件..

第一:您不能從未知的甚至是部分已知的類派生。 為了定義King ,必須首先包括Figure.h (假設King是在其他文件中定義的)。

更一般地,關於如何組織代碼,沒有一個明確的答案。 就個人而言,在一種特殊情況下(派生類的數量已定義並嚴格限制),我可能會偷工減料並在Figure.h定義所有它們,但是對於將單獨的標頭用於每個-如果沒有其他要求,則無需在創建圖的文件中包括各個圖形的標題。 另一種解決方案是將工廠功能用於圖形,並在實現工廠功能的源文件中定義派生類。

首先需要包含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位於您的include路徑中,並且與king.h處於同一文件夾中。 如果您使用的是Windows,則包含標頭的大小寫可能不正確。 在其他所有方面,請確保情況是正確的。 最后,如果Figure的定義在名稱空間中,則必須附加以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM