我最近一直在使用很多 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
的对象不必使它们成为一个指针,但第二个我有一个与它所声明的文件类型相同的对象,我需要一个吗?我环顾四周,但找不到任何有关创建自身对象的类的教程/视频。
最佳答案
如果您将类的实例放入其自身中,您会发现,您正在创建递归,因为每个实例都有自己的表达式能力
,并且这种情况会永远持续下去。如果您有一个指针,则可以控制这种无限递归,因为您可以随时将 power
设置为 nullptr
(或 NULL/0
) >, C++11 之前版本),结束递归。
关于C++ - 不完整的类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39251512/