用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函数的缘故了。
我当时的情况是这样的:
原来有个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函数的缘故了。