VC++ 在两个文件互相包含时会出现的错误
首先,要分别在两个文件中实现以下两个类
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++ 在两个文件互相包含时会出现的错误的更多相关文章
- C/C++ 中头文件相互包含引发的问题
转自:http://blog.csdn.net/hazir/article/details/38600419 今天下午遇到一个头文件相互包含而导致的编译问题,花了我不少时间去调试没找到问题,最后晚上跟 ...
- Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException ...
- VC++中的头文件包含问题
在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用(不满足继承关系,而是组合关系).也就是需要互相声明.好了,这时候会带来一些混乱.如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已 ...
- 两个问题: 1、头文件重复包含 2、头文件加了ifndef条件预处理指令为什么还会定义
第一个问题:编译时重定义 文件1.h void fun1(); struct A { int a char b; }; 文件2.h #include"1.h" struct B ...
- 海量数据处理面试题(1) 找出两文件种包含的相同的url
问题:给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 分析:50亿个url,每个url64字节,就是320G,显然是无法一次读入内存 ...
- C++中头文件相互包含与前置声明
一.类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题.假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中, ...
- C_文件包含.h文件和包含.c文件总结
很多人对C语言中的 “文件包含”都不陌生了,文件包含处理在程序开发中会给我们的模块化程序设计带来很大的好处,通过文件包含的方法把程序中的各个功能模块联系起来是模块化程序设计中的一种非常有利的手段. 文 ...
- VBA/VBScript提取Word(*.doc)文件中包含的图片(照片)
VBA/VBScript提取Word(*.doc)文件中包含的图片(照片) 要处理的人事简历表是典型的Word文档,其中一人一份doc,里面包含有个人的照片,如果要把里面的照片复制出来就比较麻烦了 ...
- 一个Java文件至多包含一个公共类
编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...
随机推荐
- mysql存储过程及经常使用函数
一.函数 1.数学函数 CEIL()进一取整 SELECT CEIL(1.2);2 FLOOR()舍一取整 SELECT FLOOR(1.9);9 MOD取余数(取模) SELECT MOD(3,8) ...
- org.apache.hadoop.ipc.Client: Retrying connect to server异常的解决
检查发现是DataNode一直连接不到NameNode. 检查各个节点在etc/hosts中的配置是否有127.0.1.1 xxxxxx.如果有把其屏蔽或者删除,重启各节点即可. 原因:127.0.1 ...
- shell的特殊符号的表示
shell中存在一些特殊的符号.这些符号可以帮助我们更好的写出shell来 1.特殊字符 符号 使用 输出 , 枚举分隔符 . 当前目 ...
- 7个基于Linux命令行的文件下载和网站浏览工具
7个基于Linux命令行的文件下载和网站浏览工具 时间:2015-06-01 09:36来源:linux.cn 编辑:linux.cn 点击: 2282 次 Linux命令行是GNU/Linux中最神 ...
- cocos2d-x游戏开发系列教程-编译运行我们的第一个cocos2d-x游戏程序
环境准备和介绍: 操作系统:64位Windows 7 sp1(Microsoft Windows [版本 6.1.7601]) 必要的软件和源码: visual_studio_ultimate_201 ...
- uva 11212
非原创!!! 原作者地址:http://www.hardbird.net/?p=238
- android 多媒体数据库详解
主要分为几节: 1. Android的媒体文件内部是如何存储的? 2. Andoid的媒体文件如何获取? 3. 在使用媒体文件的一些小技巧. 1. Android的多媒体如何存储的? Android的 ...
- perl的一些基本用法
ReadLine support available (try 'install Bundle::CPAN')cpan>进入cpan的shell,好了,我为了安装spamassassin,需要安 ...
- WAS ND集群中的HTTP内存会话复制对Java应用程序序列化编程的要求
应用程序需要遵守的约定 在会话中没有自定义对象时,WAS 集群的 HTTP 会话内存复制特性成功地实现了高可用性,使用户在宕机过程中的会话信息没有丢失,操作没有受到任何影响. 在会话中包含自定义对象时 ...
- 可编辑的表格:jQuery+PHP实现实时编辑表格字段内容
在本例中,我们会通过jQuery实现单击将一个文本信息变为可编辑的表单,你可以对文本内容进行编辑,然后点击“确定”按钮,新的内容将发送到后台PHP程序处理,并保存到数据库:当点击“取消”按钮,则页面恢 ...