首页 新闻 会员 周边

初出茅庐 求解答

0
悬赏园豆:10 [已解决问题] 解决于 2012-02-28 23:27

class Foo{

        Bar b;

};

class Bar{

        Foo a;

};

 

这个编译肯定不通过 ,请问应该怎么解决。

不好意思  豆豆少。

c++
风小手的主页 风小手 | 菜鸟二级 | 园豆:248
提问于:2012-02-22 23:07
< >
分享
最佳答案
0

class Bar;
class Foo;
class Foo {
  Bar* pb; // 只能是指针, 对于 Bar b 来说, 此时编译器还不知道 Bar 的大小.
};
class Bar {
  Foo* pf; // 同理
}; 

收获园豆:10
xan | 菜鸟二级 |园豆:215 | 2012-02-23 00:06

我隐隐约约的知道 你什么意思 ,可以把这个问题 ,再说的详细一点吗?谢了!

风小手 | 园豆:248 (菜鸟二级) | 2012-02-23 00:46

@风逝一线天: 在编译的时候, 编译器必须知道每一个类型的 size, 在你的例子中, Foo, Bar 嵌套定义, Foo Bar 相互不能知道对方的 size, 从而编译器无法分配空间. 想法, 如果使用指针(Bar* pbar), 则 size 是固定的 32 bit 或 64 bit.

xan | 园豆:215 (菜鸟二级) | 2012-02-25 23:15
其他回答(2)
0

你们讨论的是什么语言啊?我觉得C#中这应该是没问题的。

LCM | 园豆:6876 (大侠五级) | 2012-02-23 09:14

是c++里面的

支持(0) 反对(0) 风小手 | 园豆:248 (菜鸟二级) | 2012-02-23 22:47
0

采用指针就行。因为当计算Foo的大小的时候,需要知道Bar的大小。如果不用指针,也可以提前声明Bar

Rollen Holt | 园豆:210 (菜鸟二级) | 2012-03-21 16:11

也可以使用引用

支持(0) 反对(0) Rollen Holt | 园豆:210 (菜鸟二级) | 2012-05-03 16:17

这个叫做前置申明。你搜索一下c++前置申明就行了

支持(0) 反对(0) Rollen Holt | 园豆:210 (菜鸟二级) | 2012-05-03 16:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册