class A
{
A a;//why can't we do this
};
7
A
回答
15
你可以做
class A {
A* a;
}
,因为它不需要知道A.
6
A a;//why can't we do this
因为A
是一个不完整的类型,因为它没有被定义还没有,而它被定义。而编译器需要知道的A
完整的类型时,看到这里面class A
,由于A
是不完整的,它不能确定它的大小,它不能确定成员变量a
多少空间要带,所以它不会编译它。
但是由于指针的大小对编译器来说是众所周知的,不管它是什么类型的指针。您可以在类中定义一个指针这样的:
class A
{
A *pA; //okay since sizeof(pA) == sizeof(void*) == well-known to the compiler!
};
16
因为类的尺寸就达到无穷大。
(这是通过指定你不能有不完全类型作为成员,仅引用或指向它们的指针进行语言明智的,并且A
是一个不完整的类型,直到类定义的结尾。)
9
我认为你是从Java或其他东西来的? A a
将创建类型为A
的完整实例,其中包含A
,其中包含A
,其中包含A
。
你可能在想这个问题:
class A
{
A *a; // A pointer to A, not a full instance
};
1
在C++的大小: 你不能这样做,因为它将是递归结构(没有计算对象大小的结束),要克服这个问题,
使用自我指涉指针,即具有相同类型地址的指针。
class A
{
A* aObj; // Self Referential Pointer
}
1
这是你可以有一个指向A类对象的指针的方式,这样就不需要知道类A在编译时声明之前的大小。
class A {
A* a;
};
-1
Class Date
{
int d,m,y;
static Date default_date;
};
这个例子中 “ - 第三版Bjarne的Stroustrup的C++编程语言” 中给出。
它的工作原理... 一些解释会很好。
相关问题
- 1. 为什么我不能在类中声明一个字符串?
- 2. 为什么我们不能在C++中的同一个类中声明一个类的对象,但是它允许在Java中使用?
- 3. 在类声明中声明一个类对象的指针
- 4. 为什么我不能多声明一个类
- 5. 对象作为参数,为什么不能我们声明的类,而不是
- 6. 声明一个对象作为一个特定的类在PHP
- 7. 为什么不能JLabel的是一个内部类声明
- 8. 为什么我不能在保护类型的同一个包中声明一个共享变量?
- 9. 为什么我在一个声明中获得多种类型?
- 10. 为什么我们不能在const中声明一个映射并填充它?
- 11. 如何获得在另一个类中声明的类对象?
- 12. 为什么我们要在普通类中声明静态类?
- 13. 声明一个不同的通用类
- 14. 在php中声明一个抽象类
- 15. 不能在同一个类中的函数中使用变量声明的类。为什么?
- 16. 为什么我不能将一个实例变量声明为PHP中的一个对象数组?
- 17. C++什么放在一个类声明,什么不是
- 18. 为什么我们不能声明任何* Params Annotaion在类(RCC)级别,同时在Jax-RS中声明@Singleton
- 19. 为什么我们需要在类内声明一个接口?我们这样做有什么优势吗?
- 20. 为什么Flex让我把一个类当作一个对象
- 21. 我不明白为什么一个ID是不小于一类
- 22. 为了什么目的,我们想要在同一个类的主类中创建一个类的实例?
- 23. PHP:声明一个类变量是一个stdClass的对象
- 24. 为什么有可能声明一个返回正在创建的同一类的类型的方法?
- 25. 为什么我不能在扩展类中创建一个与内部类名称相同的对象
- 26. 我们如何能够在与类相同的数据类的类中声明一个静态成员?
- 27. 如何在java中的类中声明一个ArrayList对象?
- 28. 在包对象中声明一个类与在声明一个类之间是否有任何实质区别?
- 29. 为什么我不能有一个异常类一个auto_ptr
- 30. 解释认为,同一类的两个声明都是不同
当这样的类被实例化时会发生什么?它会构造一个A,构造另一个A,等等,直到时间结束。所以,是的,一个堆栈溢出的构造函数并不是一件好事。哦,是的,这个实例的大小是无限的。 – 2011-02-09 05:32:08
这是一直在下降的海龟。 – jason 2011-02-09 05:33:24