C ++ - 不完整的类类型?

时间:2016-08-31 13:49:12

标签: c++ class object

我最近一直在使用大量的C和Java,所以我很难回到C ++,为什么不允许这样做。

incomplete type is not allowed

#pragma once

class Expression
{
private:
    Expression power; // <--- incomplete type is not allowed
};

我认为这里的答案是将行Expression power更改为Expression *power,但我不明白为什么会这样。我可以声明像vector<int> var这样的对象而不必将它们作为指针,但是第二个我有一个与它被声明的文件相同类型的对象,我需要一个?我已经环顾四周,但找不到任何教学/视频来制作自己的对象。

1 个答案:

答案 0 :(得分:3)

如果你把一个类的实例放在其自身内,如果你注意到,你正在创建递归,因为每个实例都有自己的Expression power,这将永远持续下去。如果你有一个指针,你可以控制这个无限递归,因为你可以随时将power设置为nullptr,(或NULL/0,预C ++ 11),结束递归。