我最近一直在使用大量的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
这样的对象而不必将它们作为指针,但是第二个我有一个与它被声明的文件相同类型的对象,我需要一个?我已经环顾四周,但找不到任何教学/视频来制作自己的对象。
答案 0 :(得分:3)
如果你把一个类的实例放在其自身内,如果你注意到,你正在创建递归,因为每个实例都有自己的Expression power
,这将永远持续下去。如果你有一个指针,你可以控制这个无限递归,因为你可以随时将power
设置为nullptr
,(或NULL/0
,预C ++ 11),结束递归。