VC++ 在两个文件互相包含时会出现的错误

2016-02-19 16:20 6 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的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

延伸阅读
检测内存泄漏的主要工具是调试器和 CRT 调试堆函数。若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC #include stdlib.h #include crtdbg.h 注意   #include 语句必须采用上文所示顺序。如果更改了顺序,所使用的函数可能无法正确工作。 通过包括 crtdbg.h,将 malloc 和 free 函数映射到其“Debug”版本 _...
标签: 暗恋 恋爱技巧
决心不再重复做着像傻子般的一切行径时 暗恋的心情既愉快又暧昧不清,他淡淡的一个微笑或一个无助的眼神就马上把你打回原形,之前对自己说的多少狠话完全抛到九霄云外。其实,喜欢别人并不是一件丢脸的事,请善待自己的喜欢,别强求自己逃避内心的情感。 常常关注他的网上动态 暗恋你的人总是喜欢在默默地关注你的一切,随着...
VC++的Unicode编程 作者:韩耀旭 下载源代码 一、什么是Unicode 先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H—FFH)。其实,英文字符并没有那么多,一般只用前128个(00H—7FH,最高位为0),其中包括了控制字符、数...
标签: 电脑入门
有很多朋友在用U盘启动时喜欢把U盘量产成CD-ROM格式,但在量产的过程中总会出现这样或那样的问题,现在就说说最容易犯的两个错误。 一、U盘芯片型号搞错。 二、计算机USB插口电流、电压不足。第一个原因大家好理解,第二个原因大家不明白,我们仔细来看看。开始时,在14台计算机上试验的过程中,我们发现一个奇怪的现象,同样的U盘和制作软件...
VC++实现对文件夹时间的修改 摘要: 本文给出了一种通过VC++程序对文件夹的时间属性信息进行获取与更改的一种方法。 关键词: 文件夹;时间属性;Visual C++ 6.0 引言: 通常在数据维护与数据管理等工作中,经常要对各类数据进行备份操作。对于大多数的IT企业和绝大多数的个人用户而言,数据的备份主要是对数据内容...

经验教程

466

收藏

100
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部