MFC 怎么从文档类获得视图类成员变量

djc11282 2012-08-17 07:38:48
从网上看了不少方法,但是都牵扯到头文件相互包含的问题,
CTestView* pTestView;
POSITION pos=GetFirstViewPosition();
pTestView=GetNextView(pos);

如果在文档类这么定义,必须包含视图类头文件,但是我视图类中已经包含了文档类的头文件,这样就导致程序出错了,怎么解决这个问题,或者有什么其他办法得到视图类指针呢? 求指点!!
...全文
322 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
starhuhu 2012-08-18
  • 打赏
  • 举报
回复
不会存在相互包含的问题, 头文件都有 #pragma once ,关键是不要在.h文件里面包含.h, 在cpp文件里面包含 .h 文件就行。 就是在文档cpp包含view.h

傻X 2012-08-18
  • 打赏
  • 举报
回复
偶的方法是:
都到MainFrm.h里面引入

要用到就引MainFrm.h真是方便。

  • 打赏
  • 举报
回复
在你的CDocument类的头文件里
class CTestView;
就行了然后在你的CDocument类的cpp里要包含TestView.h
whucv 2012-08-17
  • 打赏
  • 举报
回复
头文件包含其实是一想很烦琐的工作,不但我们看着累,编译器编译的时候也很累,再加上头文件中常常出现的宏定义。感觉各种宏定义的展开是非常耗时间的,远不如自定义函数来得速度。我仅就不同头文件、源文件头文件包含代替不了前置声明。有的时候只能依靠前置声明来解决问题。
在你的程序里,你引用了一个前置声明是指在程序员尚未给出完整定义之前对一个标示符(一个类型、一个变量或者一个函数)的声明。一个很简单的例子就是我们在函数A中使用了函数B,但是函数B的声明在函数A之后,这个时候,就需要对函数B进行前置声明,实际上就是在函数A之前提供一个函数B的原型

你这里即是在doc头文件加前置声明
class CTestView;
如有必要在doc源文件加上testview.cpp(或者加在头文件也可),
在testview也是如此,在头文件
加前置声明
class CTestDoc;
源文件加testdoc.cpp(或者加在头文件也可)



那么究竟什么时候需要前置声明,什么时候需要头文件包含呢?

有两点原则:

第一个原则应该是,如果可以不包含头文件,那就不要包含了。这时候前置声明可以解决问题。如果使用的仅仅是一个类的指针,没有使用这个类的具体对象(非指针),也没有访问到类的具体成员,那么前置声明就可以了。因为指针这一数据类型的大小是特定的,编译器可以获知。

第二个原则应该是,尽量在CPP文件中包含头文件,而非在头文件中。假设类A的一个成员是是一个指向类B的指针,在类A的头文件中使用了类B的前置声明并便宜成功,那么在A的实现中我们需要访问B的具体成员,因此需要包含头文件,那么我们应该在类A的实现部分(CPP文件)包含类B的头文件而非在声明部分(A的H文件)。



dickbarry 2012-08-17
  • 打赏
  • 举报
回复
呵呵,兔子党遇到组织部部长了...

你百度一下就都明白了...
djc11282 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 2 楼 的回复:

引用 1 楼 的回复:
在文档类头文件中声明一下视图类就可以了,这样就可以定义指针了


我已经在视图类的头文件中包含了文档类的头文件了,所以你的方法不行啊。

把view类的h文件上面写成class CXXXXDoc;即可
[/Quote]

没看懂,求指点。。

Eleven 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
在文档类头文件中声明一下视图类就可以了,这样就可以定义指针了


我已经在视图类的头文件中包含了文档类的头文件了,所以你的方法不行啊。
[/Quote]
把view类的h文件上面写成class CXXXXDoc;即可
dickbarry 2012-08-17
  • 打赏
  • 举报
回复
百度 C++ 前向声明
djc11282 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
在文档类头文件中声明一下视图类就可以了,这样就可以定义指针了
[/Quote]

我已经在视图类的头文件中包含了文档类的头文件了,所以你的方法不行啊。
dickbarry 2012-08-17
  • 打赏
  • 举报
回复
在文档类头文件中声明一下视图类就可以了,这样就可以定义指针了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧