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

原创 2006年05月18日 15:00:00

  问题的提出:

 

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

 

class Object

{

public:

  NewType ToType();

};

 

 

class NewType : public Object

{

}

 

 

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

 

//在文件Object.h 中定义

#include "NewType.h"

class Object

{

public:

  NewType ToType();

};

 

 

//在文件NewType.h 中定义

#include "Object.h"

class NewType : public Object

{

}

 

将产生错误:

"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

{

public:

  NewType ToType();

};

 

#endif

 

 

//在文件NewType.h 中定义

#include "Object.h"

 

#ifndef _NEWTYPE_H

#define _NEWTYPE_H

 

class NewType : public Object

{

}

 

#endif

 

错误依旧

 

 

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

 

//在文件Object.h 中定义

#ifndef _OBJECT_H

#define _OBJECT_H

 

#include "NewType.h"

 

class Object

{

public:

  NewType ToType();

};

 

#endif

 

 

//在文件NewType.h 中定义

#include "Object.h"

 

#ifndef _NEWTYPE_H

#define _NEWTYPE_H

 

class NewType : public Object

{

}

 

#endif

 

产生错误:

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

  

 

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

 

//在文件Object.h 中定义

#include "NewType.h"

 

#ifndef _OBJECT_H

#define _OBJECT_H

//位置

class Object

{

public:

  NewType ToType();

};

 

#endif

 

 

//在文件NewType.h 中定义

#ifndef _NEWTYPE_H

#define _NEWTYPE_H

 

#include "Object.h"

 

class NewType : public Object

{

}

 

#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'"

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

VC++老是提示“致命错误:无法打开头文件AFXRES.H”怎么回事 提示在另一个编辑器中打开,怎么解决

非原创,网上整理。 #include "afxres.h"语句是在.rc文件中的,而afxres.h文件在VC的安装目录中的.\VC98\MFC\INCLUDE目录中,所以着重查一下To...

我发现VC++的两个错误

  • 2011-12-24 16:12
  • 27KB
  • 下载

vc++常见错误之二:“fatal error C1083: ”无法打开包括文件

原文链接:http://www.cnblogs.com/txg-blog/archive/2011/03/07/1974857.html   步骤1:定位报“fatal error C1083: ”错...

VC++ 网络程序 自带头文件错误

不知道大家有没这种经历,写了一个网络程序,一编译,吓,几十上百个错误,真是恐怖啊,我就遇到过N次了。 恐怖的错误数量,加上全部是自带头文件的错误,错误位置也不好找,微软的BUG真是害死人啊。 我最近发...

在修改C:\windows\system32\drivers\etc\hosts文件时会出现警告的对话框的解决方案

在修改C:\windows\system32\driver\hosts文件时会出现警告的对话框

VC++时经常会遇到链接错误LNK2001

学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误...

VC++出现错误: Stack around the variable was corrupted 的解决方案

Vs2010 Debug 一个C++项目完全没有问题,但是运行时出现Stack around the variable was corrupted错误。         部分代码如下:      ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)