人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的VC++ 在两个文件互相包含时会出现的错误懂设计的网友们快点来了解吧!
【 tulaoshi.com - 编程语言 】
问题的提出:
首先,要分别在两个文件中实现以下两个类
class Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)public:
NewType ToType();
};
class NewType : public Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)}
-------------------------------------------------------------------------------- 做法1 ---------------------------------------------------------
//在文件Object.h 中定义
#include "NewType.h"
class Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)public:
NewType ToType();
};
//在文件NewType.h 中定义
#include "Object.h"
class NewType : public Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)}
将产生错误:
"warning C4182: #include nesting level is 363 deep; possible infinite recursion"
"fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit"
原因是两个文件互相包含,导致包含的层次太深
-------------------------------------------------------------------------------- 做法2 ---------------------------------------------------------
//在文件Object.h 中定义
#include "NewType.h"
#ifndef _OBJECT_H
#define _OBJECT_H
class Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)public:
NewType ToType();
};
#endif
//在文件NewType.h 中定义
#include "Object.h"
#ifndef _NEWTYPE_H
#define _NEWTYPE_H
class NewType : public Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)}
#endif
错误依旧
-------------------------------------------------------------------------------- 做法3 ---------------------------------------------------------
//在文件Object.h 中定义
#ifndef _OBJECT_H
#define _OBJECT_H
#include "NewType.h"
class Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)public:
NewType ToType();
};
#endif
//在文件NewType.h 中定义
#include "Object.h"
#ifndef _NEWTYPE_H
#define _NEWTYPE_H
class NewType : public Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)}
#endif
产生错误:
"error C2504: 'Object' : base class undefined"
-------------------------------------------------------------------------------- 做法4 ---------------------------------------------------------
//在文件Object.h 中定义
#include "NewType.h"
#ifndef _OBJECT_H
#define _OBJECT_H
//位置
class Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)public:
NewType ToType();
};
#endif
//在文件NewType.h 中定义
#ifndef _NEWTYPE_H
#define _NEWTYPE_H
#include "Object.h"
class NewType : public Object
{
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)}
#endif
产生错误:
"error C2146: syntax error : missing ';' before identifier 'ToType'"
"error C2501: 'NewType' : missing storage-class or type specifiers"
原因是不能识别NewType类
解决方案:
于是在"位置"加上前向引用声明
class NewType;
编译通过
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)但采用此种做法,类的定义和实现部分不能为内联函数,或者报错
"error C2027: use of undefined type 'NewType'"
来源:http://www.tulaoshi.com/n/20160219/1611763.html
看过《VC++ 在两个文件互相包含时会出现的错误》的人还看了以下文章 更多>>