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

 

C++ 'include' 的两个头文件互相包含出错

头文件保护符 通常,现在写代码时都会随手在头文件中加入头文件保护符。有以下两种形式的保护符。 #ifndef ABCDE #define ABCDE //..... 内容 #endif #pragm...
  • Virtual_Func
  • Virtual_Func
  • 2017年03月06日 12:53
  • 1315

关于.h文件相互包含的一个现象

假设现在有四个文件,内容分别如下: test1.h#pragma once #include "test2.h"class A { public: int function1(struct_...
  • xiaohongmao663832
  • xiaohongmao663832
  • 2017年08月02日 11:58
  • 93

两个头文件相互包含的问题

此文转载至 大家知道C++文件一般包含.cpp文件和.h文件,当两个类相互在头文件中包含对方的头文件的时候编译器会报错的。如下例子: class object1 的...
  • wangsenmm
  • wangsenmm
  • 2014年05月16日 10:02
  • 521

C/C++ 中头文件相互包含引发的问题

C/C++ 中头文件相互包含引发的问题 今天下午遇到一个头文件相互包含而导致的编译问题,花了我不少时间去调试没找到问题,最后晚上跟师兄讨论不少时间,突然有所顿悟! 问题重现 我把问题脱离于项目简...
  • hazir
  • hazir
  • 2014年08月16日 00:39
  • 29906

类的交叉引用(或头文件依赖与交叉包含)

注:类的交叉引用本身就是一种不好的设计,但是,有时我们又不得不这样用。 问题 两种常见情况: (1)直接相互引用 模型: A.h中#include "B.h" B.h中#include "A.h"...
  • qiaoli278141408
  • qiaoli278141408
  • 2015年02月28日 15:17
  • 1078

C++中两个类的头文件互相包含问题

抽象概括下,就是A类定义在A.h中,A类中有个B*成员;B类定义在B.h,B类同样有A*成员        解决办法,就是A类定义前面,加上class  B;一行,进行声明,在B类定义前,...
  • a812073479
  • a812073479
  • 2014年08月13日 21:12
  • 3939

C++中两个类互相包含

今天突然想起一个C++的问题,如果一个类A包含类B的实例,而实例B也包含另一个类A,这种方式的代码应该怎么写,按照一般的开发者的想法的代码如下:文件A.h#include "B.h" #include...
  • StephenZou14
  • StephenZou14
  • 2017年01月08日 12:52
  • 559

c语言==两个结构体之间的相互调用(17)

指向结构体类型变量的使用 首先让我们定义结构体: struct stu { char name[20]; long number; float score[4]; } ; 再定义指向结...
  • weirdosick
  • weirdosick
  • 2016年11月22日 14:23
  • 1154

C++两个类的头文件相互包含

C++中头文件相互包含的几点问题 一、类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题。假设我们有...
  • Flower195
  • Flower195
  • 2014年05月04日 10:49
  • 1507

C语言中头文件相互包含问题

.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。   1)h文件作用    1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明; ...
  • Vonssss
  • Vonssss
  • 2014年10月11日 14:31
  • 2748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++ 在两个文件互相包含时会出现的错误
举报原因:
原因补充:

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