类结构中的不完整类型
将对象封装在自身内部可能是一种有用的设计模式,但是在尝试定义一个对象时会出现一个常见错误具有相同类型成员的类。考虑以下示例:
class A { private: A member; }
编译时遇到“类型不完整”错误。这是因为,在定义成员变量时,A 类本身还处于定义过程中,导致其类型未定义。
但是,使用指向类类型的指针可以避免这个问题:
class A { private: A* member; }
这是因为,在声明指针时,编译器将 A 识别为有效的类名,从而允许“指向 A 的指针”类型
如果需要非指针成员类型,可以采用替代方法:
class A;
这通知编译器 A 是一个类类型,允许它作为非指针成员引用:
class B { private: A member; };
class A { private: boost::shared_ptr<A> member; };
虽然指针对于引用自引用类类型可能很方便,但了解“不完整类型”错误的根本原因对于设计健壮且高效的面向对象结构至关重要。
以上是为什么定义相同类型的类成员会导致'类型不完整”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!