我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 问个VC问题,包含了头文件却说类没定义,为什么呢? 隐藏签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

ckak147



性别: 帅哥 状态: 该用户目前不在线
等级: 希望之光
发贴: 1716
威望: 0
浮云: 1131
在线等级:
注册时间: 2006-01-19
最后登陆: 2011-10-20

5come5帮你背单词 [ prisoner /'priznə/ n. 囚徒,俘虏 ]


问个VC问题,包含了头文件却说类没定义,为什么呢?

两个类A和B,分别定义如下
/*A.h*/
#include"B.h"
class A: public CView
{
  public:
    B b;
  .......
}

/*B.h*/
#include"A.h"
class B: public CDialog
{
  public:
    A a;
  .......
}
其中B.h处报错,说A a处有3个错误,都是“'a' uses undefined class 'A'”,如果改成指针A *a就没有错,就是运行的时候会说a没有初始化.请问这是为什么呢?为什么A.h可以而B.h却报错呢?
悟啊~~~~~
顶端 Posted: 2010-02-24 14:55 | [楼 主]
枫姐姐



贝尔诺勋章
性别: 美女 状态: 该用户目前不在线
头衔: 御姐控
等级: 人见人爱
发贴: 3381
威望: 0
浮云: 31792
在线等级:
注册时间: 2009-08-17
最后登陆: 2023-11-19

5come5帮你背单词 [ humble /'hΛmbl/ a. 恭顺的,谦卑的,地位低下的,卑贱 的 ]


LZ,很强大,编译器要被你整死了 
松岛かえで

顶端 Posted: 2010-02-24 15:01 | [1 楼]
ckak147



性别: 帅哥 状态: 该用户目前不在线
等级: 希望之光
发贴: 1716
威望: 0
浮云: 1131
在线等级:
注册时间: 2006-01-19
最后登陆: 2011-10-20

5come5帮你背单词 [ trendy // a. 流行的,赶新潮的 ]


Quote:
引用第1楼枫姐姐于2010-02-24 15:01发表的  :
LZ,很强大,编译器要被你整死了 

啊,为什么?
悟啊~~~~~
顶端 Posted: 2010-02-24 15:08 | [2 楼]
枫姐姐



贝尔诺勋章
性别: 美女 状态: 该用户目前不在线
头衔: 御姐控
等级: 人见人爱
发贴: 3381
威望: 0
浮云: 31792
在线等级:
注册时间: 2009-08-17
最后登陆: 2023-11-19

5come5帮你背单词 [ test /test/ n. & vt. 试验,测试,检验 ]


A文件中的#include"B.h"宏被展开用B.h来代替,B.h中的#include"A.h"被展开用A.h来代替,然后A.h中又展开B.h,B.h中再展开A.h,这样无休止嵌套下去。。。
松岛かえで

顶端 Posted: 2010-02-24 15:08 | [3 楼]
枫姐姐



贝尔诺勋章
性别: 美女 状态: 该用户目前不在线
头衔: 御姐控
等级: 人见人爱
发贴: 3381
威望: 0
浮云: 31792
在线等级:
注册时间: 2009-08-17
最后登陆: 2023-11-19

5come5帮你背单词 [ harmony /'ha:məni/ n. 协调,融洽,(声)谐调,和声学 ]


如果在复杂数据类型定义时出现了嵌套,编译器很可能就无法知道你定义的数据类型的大小。但是指针的大小是固定的,通常和总线宽度一致。在32位CPU中,总线宽度是32位,指针大小也是32位,因此无论是什么类型的指针都是4个字节,编译时就可以确定其大小并为之分配存储空间
松岛かえで

顶端 Posted: 2010-02-24 15:13 | [4 楼]
枫姐姐



贝尔诺勋章
性别: 美女 状态: 该用户目前不在线
头衔: 御姐控
等级: 人见人爱
发贴: 3381
威望: 0
浮云: 31792
在线等级:
注册时间: 2009-08-17
最后登陆: 2023-11-19

5come5帮你背单词 [ kiss /kis/ v. & n. 吻 ]


类似情况包括:
typedef struct A
{
  B b;
}A;

typedef struct B
{
  A a;
}B;

这样的定义对于编译器来说是很杯具的,因为在定义A和B类型时出现嵌套,编译器根本无法算出A和B的大小,也就无法为之分配存储空间。

如果改成指针就可以了:
typedef struct A
{
  B* b;
}A;

typedef struct B
{
  A* a;
}B;
因为通常32位CPU中指针是32位,编译器可以明确地知道A和B的大小并为之分配存储空间,在32位CPU中sizeof(A)和sizeof(B)都等于4
松岛かえで

顶端 Posted: 2010-02-24 15:19 | [5 楼]
ckak147



性别: 帅哥 状态: 该用户目前不在线
等级: 希望之光
发贴: 1716
威望: 0
浮云: 1131
在线等级:
注册时间: 2006-01-19
最后登陆: 2011-10-20

5come5帮你背单词 [ considerate /kən'sidərit/ a. 体谅(人)的,考虑周到的,慎重的 ]


Quote:
引用第5楼枫姐姐于2010-02-24 15:19发表的  :
类似情况包括:
typedef struct A
{
  B b;
}A;
.......

啊,之前就为嵌套引用的问题搞的头大了,不过还好,现在在类的头文件中加了个壳,就是#ifndef.....#define,就好了~我只是觉得奇怪,为什么编译器会说a引用了没有定义的A类~
如果用指针的话,请问如果实现像定义A  a中a的功能呢?就是如果初始化指针a?我是菜鸟,很多不懂,呵呵
悟啊~~~~~
顶端 Posted: 2010-02-24 15:35 | [6 楼]
all阿拉蕾



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
发贴: 884
威望: 0
浮云: 422
在线等级:
注册时间: 2010-01-09
最后登陆: 2022-06-29

5come5帮你背单词 [ novel /'novəl/ n. 长篇小说;a. 新奇的 ]


Quote:
引用第5楼枫姐姐于2010-02-24 15:19发表的  :
类似情况包括:
typedef struct A
{
  B b;
}A;
.......

枫姐姐好专业啊~~

每个人在我眼里都是一坨屎
只有你不同
                  你是两坨
顶端 Posted: 2010-02-24 18:24 | [7 楼]
曾经沧海





性别: 帅哥 状态: 该用户目前不在线
等级: 初出茅庐
发贴: 6
威望: 0
浮云: 1043
在线等级:
注册时间: 2010-02-23
最后登陆: 2010-03-01

5come5帮你背单词 [ grandfather /'grændfa:ðə/ n. (外)祖父 ]


A* a = new A;

a.a


[ 此帖被曾经沧海在2010-02-24 19:26重新编辑 ]
顶端 Posted: 2010-02-24 19:21 | [8 楼]
air





性别: 保密 状态: 该用户目前不在线
等级: 前途无量
家族: 唯war独尊
发贴: 7889
威望: 0
浮云: 1407
在线等级:
注册时间: 2005-03-14
最后登陆: 2010-12-22

5come5帮你背单词 [ factor /'fæktə/ n. 因素,要素,因数 ]


A V
顶端 Posted: 2010-02-24 23:51 | [9 楼]
zecker



自信之戒 誓言守护者 执着之戒 勇敢之戒
性别: 帅哥 状态: 该用户目前不在线
头衔: 失落
等级: 版主
家族: 萌菌物语
发贴: 10998
威望: 5
浮云: 24012
在线等级:
注册时间: 2005-09-19
最后登陆: 2024-04-29

5come5帮你背单词 [ pleasant /'pleznt/ a. 令人愉快的,舒适的 ]


这。。。。
“我不想作耶酥,我只想作撒旦,”。没有眼影,没有唇彩,没有吉他,你永远不会把这个身高只有1.69米、骨瘦如柴的男人放在眼里。而当他经过精致的化妆出现在舞台上,当他弹着爆裂的吉他出现在唱片里,没有人会再忘掉他,“我想长得更高,我想变得更性感。而当我站在舞台上,我就可以实现所有的一切。”对保守而古板的“道德先生”来说,他是撒旦;对每一个“安慰剂”的乐迷来说,布莱恩则是他们/她们心中的耶酥。
顶端 Posted: 2010-02-25 01:48 | [10 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.015342(s) query 7, Time now is:04-29 22:39, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号