[英]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.