"uses undefined class"翻译错误解决办法

今天翻译代码,总是生成一个“uses undefined class”错误,搞得我没有头绪。不过,最后还是解决了,现在把解决办法记下来,和大家分享:
问题产生过程:
有两个类,分别在两个头文件中定义:
//  ClassA.h
#ifndef _CLASS_A_H_
#define  _CLASS_A_H_

#include 
" ClassB.h "

class  ClassA
{
    
    ClassB m_ClassB;
    
};

#endif
再看另一个类:
//  ClassB.h
#ifndef _CLASS_B_H_
#define  _CLASS_B_H_

#include 
" ClassA.h "

class  ClassB
{
    
    ClassA
*  m_ptrClassA;  // 注意这里是类ClassA的指针
    
};

#endif
在编译时,在两个头文件中都会报错,分别是ClassA的定义中,找不到ClassB,和ClassB的定义中,找不到ClassA。
这个问题原因我是知道的,因为编译ClassA时,要先包含ClassB的头文件,此时在ClassB的头文件中虽然又包含了ClassA的头文件,但因为防止重复包含的作用,并不生效;但是,在解析ClassB头文件时,却遇到了ClassA的类型,于是报错。这是正常的,于是,我在ClassA的头文件中添加预定义:class ClassB;   并在ClassB头文件中添加预定义:class ClassA;,此时再编译,ClassB.h没有问题了,但是在编译ClassA.h时,却出现错误:
m_ClassB:uses undefined class 'ClassB'

问题的原因及解决办法:
后来经过仔细分析后,终于找到了答案:因为class ClassB;相当于预定义,此时编译器并不知道ClassB的具体定义,也就不知道ClassB的内存分配方式以及占用空间大小,那么,要在类ClassA中定义一个ClassB的对象,编译器就不知道该分配多少空间给它了。不过,如果不是定义一个ClassB的对象,而是定义一个ClassB的指针或是引用,那么这样来应用就没有问题了——这就是其中一个解决办法。
另一个解决办法,如果一定要在ClassA的定义中声明一个ClassB的对象,那么,可以在ClassB的头文件中去掉 #include  " ClassA.h " 这一行,只保留 class ClassA;这个预定义,不过要将#include "ClassA.h"这一行转移到ClassB.cpp文件中去。原因嘛,其实也不复杂,但是说起来却很乱,所以,我决定不再解释了!

转载于:https://www.cnblogs.com/Xiao_bird/archive/2009/09/14/1566510.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值