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

孙凉生

孙凉生

2016-02-19 16:20

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的VC++ 在两个文件互相包含时会出现的错误懂设计的网友们快点来了解吧!

问题的提出:

  首先,要分别在两个文件中实现以下两个类

class Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

public:

  NewType ToType();

}; 

class NewType : public Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

}

     --------------------------------------------------------------------------------    做法1  ---------------------------------------------------------

//在文件Object.h 中定义

#include "NewType.h"

class Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

public:

  NewType ToType();

}; 

//在文件NewType.h 中定义

#include "Object.h"

class NewType : public Object

{

(本文来源于图老师网站,更多请访问http://m.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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

#define _OBJECT_H

class Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

public:

  NewType ToType();

};

#endif

//在文件NewType.h 中定义

#include "Object.h"

#ifndef _NEWTYPE_H

#define _NEWTYPE_H

class NewType : public Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

}

#endif

错误依旧

     --------------------------------------------------------------------------------    做法3  ---------------------------------------------------------

//在文件Object.h 中定义

#ifndef _OBJECT_H

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

#define _OBJECT_H

#include "NewType.h"

class Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

public:

  NewType ToType();

};

#endif

//在文件NewType.h 中定义

#include "Object.h"

#ifndef _NEWTYPE_H

#define _NEWTYPE_H

class NewType : public Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

}

#endif

产生错误:

"error C2504: 'Object' : base class undefined"

     --------------------------------------------------------------------------------    做法4  ---------------------------------------------------------

//在文件Object.h 中定义

#include "NewType.h"

#ifndef _OBJECT_H

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

#define _OBJECT_H

//位置

class Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

public:

  NewType ToType();

};

#endif

//在文件NewType.h 中定义

#ifndef _NEWTYPE_H

#define _NEWTYPE_H

#include "Object.h"

class NewType : public Object

{

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

}

#endif

产生错误:

"error C2146: syntax error : missing ';' before identifier 'ToType'"

"error C2501: 'NewType' : missing storage-class or type specifiers"

原因是不能识别NewType类

解决方案:

于是在"位置"加上前向引用声明

class NewType;

编译通过

但采用此种做法,类的定义和实现部分不能为内联函数,或者报错

"error C2027: use of undefined type 'NewType'"

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
VC++ 在两个文件互相包含时会出现的错误

为什么在安装字体时会出现文件损坏?

电脑入门
为什么在安装字体时会出现文件损坏?

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在VC++中播放WAV文件

编程语言 网络编程
在VC++中播放WAV文件

怀孕两个月会出现哪些症状

孕前
怀孕两个月会出现哪些症状

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

怀孕两个月会出现哪些症状?

孕前
怀孕两个月会出现哪些症状?

比较两个文件

编程语言 网络编程
比较两个文件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

VC中一些控件的小技巧

VC中一些控件的小技巧

ASP入门基础教程-Application对象概述

ASP入门基础教程-Application对象概述
下拉加载更多内容 ↓