zoukankan      html  css  js  c++  java
  • 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'"

     

     

     

     

     

  • 相关阅读:
    beanstalkd 安装和配置
    vm虚拟机用批处理启动和关闭
    Windows设置VMware开机自动启动,虚拟机也启动
    批处理脚本学习笔记1--vmware虚拟机启停控制
    Shell中uname命令查看系统内核、版本
    SHELL脚本里执行的东西需要多次回车确认,怎么实现自动回车确认?
    eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled
    如何进行shell脚本正确性测试
    robot framework
    loadrunner参数化数据分配方法
  • 原文地址:https://www.cnblogs.com/fengting/p/4583875.html
Copyright © 2011-2022 走看看