[英]Use a child type in the parent type declaration
我正在嘗試做這樣的事情:
class Shape {
...
...
...
Line GetTangent();
}
class Line:Shape { ... }
它沒有用,因為尚未聲明Line
類型。 我能做什么?
轉發您的課程。
class Line;
class Shape
{
public:
Line GetTangent();
};
class Line : Shape
{
}
Line Shape::GetTangent()
{
// Do sth
}
C ++在使用時要求類型完整。 在Shape
您僅通知編譯器您將使用Line
類,但實際上並未使用它。 同樣,如果您(例如)返回Line *
或Line &
(在某種程度上也是指針),它也應該起作用,因為編譯器將僅使用指針(無需知道指針的目標是什么) )。
另一方面,如果您嘗試在Shape類中實例化Line,則它將不起作用,因為C ++不知道Line的外觀,它具有什么樣的構造函數,等等。 因此,為了使它起作用,您應該在Line類的整個定義之后提供GetTangent方法的實現,如示例所示。
這是當您嘗試在Shape中使用Line時得到的結果: http ://ideone.com/YQOjQH另一方面,如果您在外部提取GetTangent的定義,它將起作用: http ://ideone.com/ 氧化鋯
您需要轉發聲明的Line
,然后從諸如GetTangent
方法GetTangent
其返回為引用或指針。 您無法將其返回我的值,因為編譯器不會看到Line
的定義,因此不知道如何做。
通過指針或引用返回可能會很痛苦,因此您可能需要重新考慮您的類層次結構。 例如,讓Line
從Shape
派生會更加容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.