您的位置:首页 > 其它

头文件中只有结构的预先声明,未有定义

2010-12-31 09:25 246 查看
我在头文件中,预先声明了一个结构,结构的定义在cpp文件中。头文件定义如下:

#ifndef _TEST_H
#define _TEST_H
#endif
struct myTest;
class testClass
{
int a;
myTest b;
//	myTest *b;
};


我在类中,定义了一个该结构的成员变量,编译有错误:该结构未定义。换成指针类型就可以了,如注释的语句。

为什么会出现该问题呢?

在网上查了一些相关内容,是说结构myTest没有定义,就不知道该结构的所占用的空间有多大,也就无法给类testClass分配空间;如果是指针变量,由于指针所占空间的大小是固定的,也就不存在不知道空间多大的问题了,所以就不会出错。

我平时在看C++书籍的时候,不是说编译只编译cpp文件,头文件仅仅扩展,为什么头文件又存在空间分配的问题?

看了网上的有关解释,我思考了一下,感觉应该是这样:虽然编译事情头文件不需要分配空间,但编译器要求类必须完整定义。不然另外一个cpp(不是你定义结构的cpp)需要使用这个类型,它怎么知道myTest是什么?而且,在以后需要分配空间的时候,你希望编译器再跑到你cpp里找定义,还是现在就记录定义信息,以后不再查找?虽然此时不需要分配空间,但是如果按照你设想的方法,每次需要分配空间时,编译器还是需要分析每个cpp文件,找到myTest的信息,这是非常非常没效率的。类型定义必须完整,这样才能使得编译器高效工作。

不知道该想法是否完全正确,如果错误,或有更好的解释,请大家指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐