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

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

ckak147



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

5come5帮你背单词 [ territory /'teritəri/ 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帮你背单词 [ jingle /'d3əiŋgl/ v. & n. (使)叮当响 ]


LZ,很强大,编译器要被你整死了 
顶端 Posted: 2010-02-24 15:01 | [1 楼]
枫姐姐



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

5come5帮你背单词 [ shovel /'Λvl/ n. 铲子,铁锨;v. 用铲子铲 ]


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 | [2 楼]
枫姐姐



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

5come5帮你背单词 [ postpone /pəust'pəun/ vt. 延迟,延期 ]


如果在复杂数据类型定义时出现了嵌套,编译器很可能就无法知道你定义的数据类型的大小。但是指针的大小是固定的,通常和总线宽度一致。在32位CPU中,总线宽度是32位,指针大小也是32位,因此无论是什么类型的指针都是4个字节,编译时就可以确定其大小并为之分配存储空间
顶端 Posted: 2010-02-24 15:13 | [3 楼]
枫姐姐



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

5come5帮你背单词 [ require /ri'kwaiə/ vt. 要求,需求 ]


类似情况包括:
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 | [4 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.008544(s) query 6, Time now is:11-22 00:00, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号