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

 我在头文件中,预先声明了一个结构,结构的定义在cpp文件中。头文件定义如下:

  

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

 

为什么会出现该问题呢?

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

 

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

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

 

不知道该想法是否完全正确,如果错误,或有更好的解释,请大家指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值