MFC类引用的一个小问题

pjl110 2010-08-07 04:53:11
我建了一个单文档A,里面有

CAView这个类。

现在我又建立了一个窗口类B。

我要用A的菜单创建一个B的对象

自然是把B b放在A中。

当然要把AView.cpp中加上

#include "B.h"

这个时候,我又要在B中某个时候,比如说点了B的某个按钮,让CAView执行自己的某个函数。

这个时候我如何操作呢?

我试图通过

CAWnd *f = (CAWnd*)theApp.GetMainWnd ();
CAView *v = f -> GetActiveView ();

得到当前CAView的对象然后操作之。

可是这个时候CAView在B中又是无法识别的。

因为在B.cpp中不能再引用"AView.h"

这个时候我该怎么办呢?

这个问题其实困扰了我N百十年了,也不知道我上面的叙述时候清楚。

请高手指教一二!
...全文
61 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dvlinker 2010-08-07
  • 打赏
  • 举报
回复
C++ 之类的前置声明问题:
定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样:一编译,就出现了一个互包含的问题了。

LZ可以查阅:http://hi.baidu.com/doctorjohnson/blog/item/ebbdd934a6499f375ab5f513.html
pjl110 2010-08-07
  • 打赏
  • 举报
回复
楼上二位大侠对的解释很精辟!

我现在会两种方法来解决这个问题了!哈哈!非常感谢!
wltg2001 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pjl110 的回复:]
引用 1 楼 wltg2001 的回复:
因为在B.cpp中不能再引用"AView.h"
=========
在B中为什么不能用AView.h啊?可以用的吧


因为AView.cpp中引用了B.h
[/Quote]
可以用的,不过在加的时候要像我上面说的那样,先加文档类的头文件。
出错的原因并不是AView.cpp中引用了B.h,
而是AView.h中有一个内联函数:CXXXXDocument* CGetDocument(){ }
这里用到文档类,所以要先包含文档类的头文件。
pjl110 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wltg2001 的回复:]
因为在B.cpp中不能再引用"AView.h"
=========
在B中为什么不能用AView.h啊?可以用的吧
[/Quote]

因为AView.cpp中引用了B.h
wltg2001 2010-08-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wltg2001 的回复:]
因为在B.cpp中不能再引用"AView.h"
=========
在B中为什么不能用AView.h啊?可以用的吧
[/Quote]
我知道楼主的问题了,
你是不是在对话框类B类中直接加了#include "xxxView.h"啊,这样不行,应该这样写:
#include "rrrrDoc.h"
#include "rrrrView.h"

要将文档类的头文件先加上去,因为视图类中引用了文档,所以如果不加的话会出现:
语法错误 : 缺少“;”(在“*”的前面) 这样的错误
liyinlei 2010-08-07
  • 打赏
  • 举报
回复
//A头文件

#include "B.h"
class B;
class A
{
public:
B* m_pB;
}


//B的cpp
#include "A.h"
void B::func()
{
CAWnd *f = (CAWnd*)theApp.GetMainWnd ();
CAView *v = f -> GetActiveView ();
}
wltg2001 2010-08-07
  • 打赏
  • 举报
回复
因为在B.cpp中不能再引用"AView.h"
=========
在B中为什么不能用AView.h啊?可以用的吧

16,548

社区成员

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

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

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