class KDTree 没有名为 GeneratTree 的成员

本文通过解决GCC编译时出现的“classKDTree没有名为GeneratTree的成员”错误,详细介绍了如何排查并修复此类问题。作者最初遇到该错误是因为在更新头文件后,编译器仍在使用旧的预编译缓存文件。最终通过删除旧的预编译缓存文件(.gch文件),解决了问题。
摘要由CSDN通过智能技术生成
用Gcc编译cpp程序时不停出现这个错误。
我当时的情况是这样的:
原来有个GenerateTree函数,与main 函数定义在同一个文件里,在main的前面,而main函数里调用了GenerateTree函数。

后来我把GenerateTree放到单独的头文件KDTree中,写好了KDTree.h头文件,声明好GenerateTree函数,并写好了函数体。

但在编译时,总是提示这个错误:class KDTree 没有名为 GeneratTree 的成员。

按照其提示的含义,我检查了KDTree.h很多遍,总是怀疑是不是哪个地方格式错了,或者包含的格式写错了。
还把KDTree的头文件和实现文件分开放,都无济于事。
花了整整一晚上都没有解决,
第二天还是这样。这时一个现象引起我注意,因为KDTree中除了这个GenerateTree函数外还有其他函数,我在出错的地方 把GenerateTree改成别的函数名,这时就不再 报错。
为什么调用同一个头文件里的函数,会出现两种结果呢?
仔细想想,这个GenerateTree函数是我后来从别的地方加进来的,而别的函数原来就 存在。
那很可能是编译器保留了改变之前的工程信息,而且一直在使用原有信息进行编译。
我马上去目录下查看相关的文件,把源文件和头文件之外的其他所有由编译器生成的文件都删除。发现有一个文件叫KDTree.h.gch。
查了一下,gch文件是gcc的预编译头文件。是为了提高编译速度,而将头文件编译成中间代码。
尽管我后来修改了源文件,但编译器一直在使用原来的头文件生成的gch。
这就是为什么编译其认识不到新加进来的GenerateTree函数的缘故了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值