欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

无法将函数定义与现有的声明匹配 问题的解决办法 分享

程序员文章站 2024-03-02 18:39:58
今晚在整mfc,遇到了以下的问题。 d:\我的文档\visual studio 2008\projects\virtualosc\arraylisttype.h(171)...

今晚在整mfc,遇到了以下的问题。

d:\我的文档\visual studio 2008\projects\virtualosc\arraylisttype.h(171) : error c2244:
“arraylisttype<elemtype>::maxlistsize”: 无法将函数定义与现有的声明匹配
1> d:\我的文档\visual studio 2008\projects\virtualosc\arraylisttype.h(37) : 参见
“arraylisttype<elemtype>::maxlistsize”的声明
1> 定义
1> 'int arraylisttype::maxlistsize(void)'
1> 现有声明
1> 'int arraylisttype<elemtype>::maxlistsize(void)'

想了挺久的都没能解决,后来在百度的帮助下解决了。问题其实很好解决,只是自己没想到,但是没办法,没想到就是没想到。现在把问题记录下来,下次再出现这种问题就能快速解决。解决方法在下面:

在arraylisttype.h前加入:

#ifndef arraylisttype_h
#define arraylisttype_h

在arraylisttype.h末尾加入:

#endif

这样头文件arraylisttype.h就不会被重复包含而导致编译错误了。现在,对上面的语句进行解释。


#ifndef arraylisttype_h 的意思是“如果没有定义宏 arraylisttype_h”

#define arraylisttype_h 的意思是“定义宏 arraylisttype_h”

#endif 的意思是“结束”

总的说就是,假如标识符arraylisttype_h没有被定义,那么定义标识符arraylisttype_h,并让#ifndef和#endif之间的代码被编译处理。如果头文件arraylisttype_h 被第二次包含,语句#ifndef就会失效,并且#endif之前的全部语句将被编译器忽略。————data structure using c++,d.s.malik

以后自己再写头文件一定记得要添加上面的预处理命令