社区
C++ 语言
帖子详情
前向声明为什么一定要是指针呢
xuegao007
2008-02-22 10:00:07
#include <iostream.h>
class B;
class A
{
public:
protected:
B b; //这样写为什么不行,变成B* b 就可以了。why?
};
class B
{
public:
protected:
A a; //这里是没问题的。
};
void main()
{
}
...全文
70
3
打赏
收藏
前向声明为什么一定要是指针呢
#include class B; class A { public: protected: B b;//这样写为什么不行,变成B* b 就可以了。why? }; class B { public: protected: A a;//这里是没问题的。 }; void main() { }
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chengzhe
2008-02-22
打赏
举报
回复
楼上正解,不知道大小 无法分配空间
tjltail
2008-02-22
打赏
举报
回复
这个问题是这样的
在B还没有定义前,你不知道b的大小,编译器在编译A的时候没有办法知道A的大小,编译当然会有问题
而是指针就不同了,编译器中指针的大小是一定的,不管你的类型,取指针大小就可以了.
而在b中a的对象是没有问题的,a的大小根据前面的定义就可以知道了,所以没有问题.
ltc_mouse
2008-02-22
打赏
举报
回复
前向声明后,B还属于不完全类型,编译器只是知道B是class类型的,但这个class具体有哪些属性,无法知道;尝试定义B b是不合理的(要定义,需要知道它的大小,但现在却不知道...);但B* b没有问题,在一个系统中,指针变量占用的存储空间是一样的,既然我知道了B是class类型,那么B*就是有效的指针类型,从而它的存储空间已知,定义可以成立~
相关推荐
C++填坑:
前向
声明
学习的过程中无意间看到
前向
声明
的用法,在这之前开发项目过程中出现过由于模块太多,不同.h相互包含导致的各种问题,使用
前向
声明
可以
一定
程度上减少出现由于头文件重复包含的问题,特此记录 详解
前向
声明
就是提前
声明
类,但不去定义它,可以使用该类的
指针
或引用。
声明
的类是一个不完全类型(有
声明
没定义,找不到任何成员函数和成员变量),因此在使用上会有限制。 class ForwardDeclare;//
前向
声明
一个类 (1)不能定义ForwardDeclare类的对象。 (2)可以用于定义指向这个类型的
指针
或引用。(
C++笔记之
前向
声明
前向
声明
即在定义之前先
声明
,其主要作用在于,避免了当两个类相互调用时include出现循环导致的编译错误,在类很多时,我们并不能确保某两个类
一定
不会互相调用,为了避免这种潜在的错误,最好使用
前向
声明
,写法如下: //Test.h Class ClassA;//向前
声明
类ClassA ClassA *mClass;//此时只能定义ClassA的
指针
和引用,在Test类中
声明
一个ClassA的
指针
深入学习C++
前向
声明
1.我们为什么需要
前向
声明
? 2.
前向
声明
的几点事项
前向
声明
不能
声明
被typedef 的类型明,可以
前向
声明
其他命名空间类型,可以
前向
声明
模版,
前向
声明
是指
声明
一个在其他中文件定义的类型,一种不完全
声明
,
前向
声明
时不能含有未
声明
类型,但可以包含
前向
声明
,所有
前向
声明
需共同遵守
前向
声明
的使用规则,我们只能
声明
或定义不完全类型的
指针
或引用,而且不能对
指针
进行运算,不能解引用,亦不能使用。
前向
声明
研究
1)定义变量需要全定义2)类之间:按
指针
或引用传参数可以使用
前向
声明
3)内嵌类:无论按
指针
、引用或是按值传参数、均可以
前向
声明
搞定4)gcc和CC不支持
前向
enum的
前向
声明
类的作用域
类的作用域 类的
前向
声明
——
前向
声明
的类不能实例化
前向
声明
后不能定义对象,但可定义对象
指针
或引用
前向
声明
:在一个头文件定义的类中,存在另一个头文件中定义的类的对象 class B;//
前向
声明
class A { public:A();~A(); private:B *b;//对象
指针
}; #include “B.H”//包含头文件 class A { publ
发帖
C++ 语言
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
6.3w+
社区成员
25.0w+
社区内容
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2008-02-22 10:00
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下