SDI 拆分窗口时 两个类似的视图,为什么一个头文件中需要声明DOC类,而另一个则不需要声明

 

  

      LeftView.h中文件

 

class CLeftView : public CTreeView
{
protected: // 仅从序列化创建
	CLeftView();
	DECLARE_DYNCREATE(CLeftView)

// 属性
public:
	CTest1Doc* GetDocument(); //  用到了DOC类
 。。。。。。                                                                                                                        }


 

LeftView.cpp中 已经添加了CTest1Doc的头文件

#include "stdafx.h"
#include "Test1.h"

#include "Test1Doc.h"   //添加了DOC类的头文件
#include "LeftView.h"

 

 

为什么编译时会出现如下错误:


leftview.h(18) :error C2143: 语法错误 : 缺少“;”(在“*”的前面)
leftview.h(18) :error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
leftview.h(18) :error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
leftview.h(18) :warning C4183: “GetDocument”: 缺少返回类型;假定为返回“int”的成员函数

 

原理分析:

c++在编译leftView.cpp 时 已经include Doc文档类的头文件了,为什么还是出错, 很让人郁闷的一件事情。

这个错误的解决很简单,只要在leftView.h中声明一下文档类就可以了

 

#pragma once


class CTest1Doc;

class CLeftView : public CTreeView
{
。。。
}

 

       而这解决方法才是让人疑惑的开始,为什么另一个类似的视图CTest1View, 却不需要在其头文件中声明文档类呢?  百思不得其解。。。,因为不能启动调试,所以还不好确定到底是哪个文件出错了。

      后来想了一个方法,用以确定到底是哪个文件出错------------------------------------------------那就是将所有CPP文件,分别单独的编译下

      结果如下:

                     LeftView.cpp    编译成功

                     Test1View.cpp  编译成功

                     Test1Doc.cpp  编译成功

                     Test1.cpp    编译成功

                     stdafx.cpp  编译成功

                     MainFrm.cpp     编译出错   。。。。。。。。。。。。。。。             终于找到它了 :》

 

    我们看一下,MainFrm.cpp 添加的头文件

 

#include "stdafx.h"
#include "Test1.h"

#include "MainFrm.h"

#include "LeftView.h"

#include "Test1View.h"


 

   用到了LeftView和Test1View两个视图类 而这两个视图中中用到了文档类, 但MainFrm.cpp中并没用添加文档类,所以问题就出来了。。。。。

 

   知道问题所在,便有了对策

  对策1: 在MainFrm.cpp中 添加文档类,且让其在两个视图类的前面

 

#include "stdafx.h"
#include "Test1.h"
#include "MainFrm.h"

#include "Test1Doc.h "

#include "LeftView.h"
#include "Test1View.h"


 对策2: 在LeftView.h中声明一下文档类, 这样因为其处在在Test1View.h的前面,自然Test1View.h中 就不用重新声明文档类了

 

#pragma once


class CTest1Doc;

class CLeftView : public CTreeView
{
。。。
}

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清水迎朝阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值