gpt4 book ai didi

c++ - "Incomplete type"在类中具有与类本身相同类型的成员

转载 作者:IT老高 更新时间:2023-10-28 12:33:05 26 4
gpt4 key购买 nike

我有一个类应该有同一个类的私有(private)成员,例如:

class A {
private:
A member;
}

但它告诉我 member 是不完整的类型。为什么?如果我使用指针,它不会告诉我不完整的类型,但我宁愿不使用指针。任何帮助表示赞赏

最佳答案

在你声明你的成员时,你仍然在定义 A 类,所以 A 类型仍然是未定义的。

但是,当你编写A*时,编译器已经知道A代表一个类名,所以类型“pointer to A”是定义。这就是为什么您可以嵌入一个指向您正在定义的类型的指针。

同样的逻辑也适用于其他类型,所以如果你只是写:

class Foo;

您声明了类 Foo,但您从未定义它。你可以写:

Foo* foo;

但不是:

Foo foo;

另一方面,如果编译器允许递归定义,您希望类型 A 的内存结构是什么?

但是,有时在逻辑上,有一个类型以某种方式引用同一类型的另一个实例。人们通常为此使用指针,甚至更好:智能指针(如 boost::shared_ptr)以避免手动删除。

类似:

class A
{
private:
boost::shared_ptr<A> member;
};

关于c++ - "Incomplete type"在类中具有与类本身相同类型的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6349822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com