【问题标题】:C++ incomplete type classC++ 不完整类型类
【发布时间】:2016-10-06 09:51:33
【问题描述】:

我在 C++ 中创建了一个类,它有一个相同类的成员,它给出了一个不完整的类型类错误。

class A{
    private:
        A member;
};

我找到了这些 "Incomplete type" in class which has a member of the same type of the class itself ,Incomplete Type 这些很好地解释了错误发生的原因以及如何修复它。

但为了练习,我在 python 2.7 上编写了相同的代码,它能够使用同一类的成员创建一个类。

我的问题是如何(解释是什么)python 能够做到这一点,以及 c++ 和 python 在处理这个特定问题方面可能存在的区别

python 代码:

class node:
    def __init__(self,t):
        self.key=t
        self.lc=None
        self.rc=None

parent=node(10)
lc=node(5)
rc=node(15)
parent.lc=lc
parent.rc=rc

【问题讨论】:

  • 您不能将类实例作为成员放入 C++ 中。这将导致无限递归。此外,您在类声明后缺少分号。
  • 是的,我得到了 c++ 的解释,我想知道 python 如何以及为什么能够做到这一点
  • 好吧,你问的是c++还是python有点不清楚。
  • @Nikhil 你会显示你想要解释的python代码吗?
  • Python 和 C++ 甚至一点也不相似。比较它们完全没有意义。请提出一个有意义的问题。

标签: python-2.7 incomplete-type


【解决方案1】:

Python 具有鸭子类型,并且在您调用其构造函数之前实际上并不创建成员对象。

在 Python 中,您的变量甚至可以包含一个字符串,然后是一个类对象。我不明白您将如何拥有“相同的代码”。您无需指定变量的类型,它们可以包含您想要的任何内容,只会在错误操作时引发错误。

在 C++ 中,成员 A 将与类同时创建,导致无限递归。

Use a pointer如果你想选择何时分配成员。

【讨论】:

  • 使用相同的代码,我的意思与使用类对象作为类的成员相同。
【解决方案2】:

你确定吗?

>>> class A:
...     aa = A()
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in A
NameError: name 'A' is not defined

我在 Python 2.7 和 3.5 中都得到了这个。

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 2016-12-07
    • 2017-01-08
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2014-01-28
    相关资源
    最近更新 更多