社区
C语言
帖子详情
C++问题:请问对象之间是否可以互相引用?
布鲁克零三四四
2002-04-17 07:30:10
C++问题:请问对象之间是否可以互相引用?
比如两个类,我希望A中有B的指针,B中有A的指针,请问这样的要求是否允许实现,怎么实现?
以下代码在VC中未能通过编译。
class B;
class A
{
B m_b;
}
class B
{
A m_A;
}
...全文
147
8
打赏
收藏
C++问题:请问对象之间是否可以互相引用?
C++问题:请问对象之间是否可以互相引用? 比如两个类,我希望A中有B的指针,B中有A的指针,请问这样的要求是否允许实现,怎么实现? 以下代码在VC中未能通过编译。 class B; class A { B m_b; } class B { A m_A; }
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
布鲁克零三四四
2002-04-24
打赏
举报
回复
谢谢各位,在大家的帮助下,我的问题已经说理解决了。
我再补充一下吧,
我发现在使用申明的方式中(VC中肯定是这样)
A *pa;
与
A* pa;
是有区别的,在这种互相引用的代码中表现的很明显
再次谢谢大家。
bequickly
2002-04-18
打赏
举报
回复
类和其对象是两个概念
静态的类的描述是不能表现出对象在生存期间的动态关系的
lsaturn
2002-04-17
打赏
举报
回复
长见识
我原来以为声明就可以了。
Kingchen
2002-04-17
打赏
举报
回复
调用指针嘛,当然要用到指针符了。
std::coding::peasant
2002-04-17
打赏
举报
回复
据我理解:
class B;
class A
{
B m_b;
}
class B
{
A m_A;
}
无法分配内存,A是鸡,B是蛋,到底是鸡大还是蛋大?
m_b占用的内存和B类的内存相同
m_A占用的内存和A类的内存相同
那么他们的构造函数放到哪里去了?
sizeof(A)=sizeof(B)+sizeof(A构造)
sizeof(B)=sizeof(A)+sizeof(B构造)
此方程无解
class B;
class A
{
B *m_b;
}
class B
{
A *m_A;
}
就可以了,m_b和m_A只是一个地址,在VC里面是DWORD,占4个字节,如果用new分配内存,
m_b和m_A的内存分配到新的地址空间了,没有谁包含谁的管理了。
LionEagle
2002-04-17
打赏
举报
回复
class B;
class A
{
B m_b;
};
class B
{
A m_A;
};
之所以不通过是因为C++编译器不进行全局的优化,它要求在用一个类型来定义变量之前该类型必须已经定义过了,之所以要这样是因为不知道类型定义的话,编译器无法为变量分配内存
在B m_b;之前,只有class B;,这只是一个声明而不是定义,所以会报错
而改为B* m_b;或B& m_b;能通过是因为B* m_b是指针,编译器总可以为指针分配内存,它只要知道指针是指向什么类型即可,所以只要有声明就可以了。对于引用,它在实现时和指针差不多,因而也只需要声明即可。
如果C++编译器能全局优化的话,以下代码也可以通过,因为信息足够为变量分配内存,不过因为C++编译器没有全局性,所以实际上不能通过
class A
{
B m_b; // 只要编译器向后找就可以找到class B的定义
}
class B
{
A* m_A;
}
所以要使用者来避免这样的情况,做法也很简单,将class A与class B定义颠倒,再再class B前面加上 A的声明即可,即
class A;
class B
{
A* m_A;
};
class A
{
B m_b; // 这里可以不定义为指针,因为前面有A的定义,如果前面只有
// A的声明的话,就要定义为指针(或引用)
};
bequickly
2002-04-17
打赏
举报
回复
HOHO 偶快了那么一点点 ^_^
bequickly
2002-04-17
打赏
举报
回复
class B;
class A
{
B* m_b;
};
class B
{
A* m_A;
};
【
C++
】类与类
之间
互相
包含、
引用
的解决方法。
在做项目时遇到了下面的
问题
:error C2146: 语法错误 : 缺少“;”(在标识符“User”的前面)error C4430: 缺少类型说明符 - 假定为 int。注意:
C++
不支持默认 interror C4430: 缺少类型说明符 - 假定为 int。注意:
C++
不支持默认 intUser是我自己定义的一个类。这个报错在另一个类Room里,Room的类的成员中,含有一个User ...
c++
中两个类
互相
包含
引用
怎么处理
写代码的时候,有时候会遇到A类需要调用B类的函数;B类有需要调用A类中的函数;那么这时候要怎么处理呢?
C++
中两个类中
互相
引用
有时候,我们会有两个类需要
互相
引用
的场景,由于两个类的定义是有顺序的,因此两个类相互
引用
,不管哪个类在前面,都会出现有一个类未定义的情况。这时可以通过类的前置声明来提前告诉编译器,所要
引用
的是个类,但由于此时后面的那个类还没有定义,因此无法给
对象
分配确定的内存空间,故只能使用类指针而不能是类实体。// A.h #include "B.h" class A { public: A(B* pB)
C++
中
引用
绑定到临时
对象
的
问题
及解决方案
在
C++
中,
引用
绑定到临时
对象
是一个常见的
问题
,但通过合理使用const
引用
、值传递或右值
引用
,我们可以轻松解决这个
问题
。如果函数不需要修改参数,使用const
引用
是最高效的方式。如果函数需要修改参数,或者我们不希望使用const修饰,值传递是一个安全的选择。如果函数需要明确处理临时
对象
,右值
引用
是最佳选择。总之,理解
引用
和临时
对象
的生命周期是编写安全、高效
C++
代码的关键。希望这篇文章对你有所帮助!如果你对
C++
的
引用
、临时
对象
或其他特性有更多
问题
,欢迎继续探讨。
C++
类
互相
引用
C++
中经常会遇到一个
问题
:两个类
之间
互相
用到对方。
问题
: 这种是不是一个好的设计? 如果不是一种好的设计,有什么办法规避? 如果没办法规避,代码应该如何写来避免出现各种编译或运行
问题
? 参考: https://stackoverflow.com/questions/4964482/how-to-create-two-classes-in-c-which-use-each-other-as-data
问题
举例 File: bar.h #ifndef BAR_H #define BAR_H #include
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章