我在头文件中,预先声明了一个结构,结构的定义在cpp文件中。头文件定义如下:
我在类中,定义了一个该结构的成员变量,编译有错误:该结构未定义。换成指针类型就可以了,如注释的语句。
为什么会出现该问题呢?
在网上查了一些相关内容,是说结构myTest没有定义,就不知道该结构的所占用的空间有多大,也就无法给类testClass分配空间;如果是指针变量,由于指针所占空间的大小是固定的,也就不存在不知道空间多大的问题了,所以就不会出错。
我平时在看C++书籍的时候,不是说编译只编译cpp文件,头文件仅仅扩展,为什么头文件又存在空间分配的问题?
看了网上的有关解释,我思考了一下,感觉应该是这样:虽然编译事情头文件不需要分配空间,但编译器要求类必须完整定义。不然另外一个cpp(不是你定义结构的cpp)需要使用这个类型,它怎么知道myTest是什么?而且,在以后需要分配空间的时候,你希望编译器再跑到你cpp里找定义,还是现在就记录定义信息,以后不再查找?虽然此时不需要分配空间,但是如果按照你设想的方法,每次需要分配空间时,编译器还是需要分析每个cpp文件,找到myTest的信息,这是非常非常没效率的。类型定义必须完整,这样才能使得编译器高效工作。
不知道该想法是否完全正确,如果错误,或有更好的解释,请大家指正。