奇怪的找不到类型错误-头文件互相包含
2011-07-06 20:14
330 查看
报错:
./src/MemPageMaster.h:54: 错误:‘Page’ 不是 ‘XXX’ 的成员
../src/MemPageMaster.h:54: 错误:expected primary-expression before ‘,’ token
../src/MemPageMaster.h:54: 错误:expected primary-expression before ‘>’ token
../src/MemPageMaster.h:54: 错误:‘page’ 在此作用域中尚未声明
原因:因为Page和MemPageMaster都是模板类,需要所有定义和声明都在头文件"Page.h"和"MemPage.h"中,不能分离,这两个头文件互相包含,造成其中一个类无法编译,从而出现编译错误。
解决方法:
去除头文件互相包含,仅仅使一方包含另一方,比如只MemPage.h包含Page.h,Page.h不包含MemPage.h,然后在Page.h中增加MemPageMaster类的声明,
#############################################
Page.h
注释掉:
//#include "MemPageMaster.h"(这一行注释掉)
增加声明(注意在声明中提供模板参数的默认值,而非该类定义的头文件中:)
template<typename K, typename V, size_t NUMVALELEM = 1>
class MemPageMaster;
在"MemPageMaster.h"中包含"Page.h"
#############################################
#include "Page.h"
....
./src/MemPageMaster.h:54: 错误:‘Page’ 不是 ‘XXX’ 的成员
../src/MemPageMaster.h:54: 错误:expected primary-expression before ‘,’ token
../src/MemPageMaster.h:54: 错误:expected primary-expression before ‘>’ token
../src/MemPageMaster.h:54: 错误:‘page’ 在此作用域中尚未声明
原因:因为Page和MemPageMaster都是模板类,需要所有定义和声明都在头文件"Page.h"和"MemPage.h"中,不能分离,这两个头文件互相包含,造成其中一个类无法编译,从而出现编译错误。
解决方法:
去除头文件互相包含,仅仅使一方包含另一方,比如只MemPage.h包含Page.h,Page.h不包含MemPage.h,然后在Page.h中增加MemPageMaster类的声明,
#############################################
Page.h
注释掉:
//#include "MemPageMaster.h"(这一行注释掉)
增加声明(注意在声明中提供模板参数的默认值,而非该类定义的头文件中:)
template<typename K, typename V, size_t NUMVALELEM = 1>
class MemPageMaster;
在"MemPageMaster.h"中包含"Page.h"
#############################################
#include "Page.h"
....
相关文章推荐
- FindResource函数错误代码:1813-找不到映像文件中指定的资源类型 与LoadResource函数错误代码:1812-指定的映像文件不包含资源区域
- VC++ 在两个文件互相包含时会出现的错误
- android studio 创建安卓项目时 报R文件找不到错误 可能源于布局xml文件包含错误
- Dos 下编译java文件引用到多个第三方jar时必须逐个指定到具体的jar,否则报找不到类型错误
- 头文件互相包含与error C2146: 语法错误 : 缺少“;”的问题
- 解决MFC中两个类互相包含头文件所导致的错误
- 头文件互相包含与error C2146: 语法错误 : 缺少“;”的问题
- linux 下tomcat部署项目中包含中文名称文件,报404找不到文件错误
- 错误 78 “Web.NewsDetail”不包含“Label1”的定义,并且找不到可接受类型为“Web.NewsDetail”的第一个参数的扩展方法“Label1”(是否缺少 using 指令或程序
- linux 下tomcat部署项目中包含中文名称文件,报404找不到文件错误
- tomcat部署项目中包含中文名称文件,报404找不到文件错误
- 错误 X “X1”不包含“XX2”的定义,并且找不到可接受类型为“X1”的第一个参数的扩展方法“XX2”(是否缺少 using 指令或程序集引用?)
- VC中头文件互相包含错误
- VC++ 在两个文件互相包含时会出现的错误
- 头文件互相包含与error C2146: 语法错误 : 缺少“;”的问题
- aspx文件,app_code内的类无法使用的排查 编译器错误消息 CS0246 找不到类型或命名空间名称“QPUtils”(是否缺少 using 指令或程序集引用)
- C语言:未包含头文件引起的奇怪错误
- C# 001 --- 正确的删除一个控件的事件函数 --- 解决错误: “A”不包含“B”的定义,并且找不到可接受类型为“A”的第一个参数的扩展方法“B”(是否缺少 using 指令或程序集引用?)
- C2143: 语法错误 C4430: 缺少类型说明符 - 假定为 int 原因是没有包含头文件(含糊不清,以备查)
- 编译器错误消息: CS1061: “ASP.default_aspx”不包含“Button1_Click”的定义,并且找不到可接受类型为“ASP.default_aspx”的第一个参数的扩展方法“Bu