【发布时间】:2019-02-09 09:20:06
【问题描述】:
我对 c++ 相当陌生,我的大部分写作都是用 Python 编写的。
在 Python 中,如果我想创建一个类来保存有关人类的信息,我可以编写一个可以将其“父级”作为其变量之一的类。在 Python 中,我大致会这样做:
class Human:
def __init__(self, name):
self.name = name
first = Human("first")
second = Human("second")
second.parent = first
second.parent = first 表示人类 second 的父级是人类 first。
在 c++ 中我尝试实现类似的东西:
class Human {
public:
Human parent;
};
int main() {
Human first = Human();
Human second = Human();
second.parent = first;
}
此示例带有field has incomplete type: Human 的错误。我明白了,因为它说我的 Human 对象中不能有 Human,因为还没有对 Human 是什么的完整定义。当我搜索相关帖子时,我不断提出使用前向声明和指针的解决方案,但我无法使其正常工作。
如果能帮助我使 c++ 示例按照我想要的方式运行,我将不胜感激。
谢谢。
【问题讨论】:
-
你应该使用
parent的引用或指针 -
第一:你不能。第二:在您的用例中没有任何意义。因此,如 πάντα ῥεῖ 所说,请使用指针或引用。您不希望您的孩子拥有父类的完整副本!
-
你想做的声明就像一个无限的matroschka。困难可能在于意识到在 C++ 中值是值而不是引用
标签: c++ class oop forward-declaration incomplete-type