我正在尝试做这样的事情:
class Shape {
...
...
...
Line GetTangent();
}
class Line:Shape { ... }
它不起作用,因为尚未声明类型Line
。
我该怎么办?
答案 0 :(得分:2)
转发你的课程。
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/ZrOgdR
答案 1 :(得分:2)
您需要转发声明Line
,然后将其从GetTangent
等方法作为引用或指针返回。您无法将其返回给我的值,因为编译器不知道如何执行它,因为它没有看到Line
的定义。
通过指针或引用返回可能会很麻烦,因此您可能需要重新考虑类层次结构。例如,Line
从[{1}}派生Shape
更容易让人更容易。