我建了一个单文档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百十年了,也不知道我上面的叙述时候清楚。请高手指教一二!
CAView *v = f -> GetActiveView ();得到当前CAView的对象然后操作之。可是这个时候CAView在B中又是无法识别的。因为在B.cpp中不能再引用"AView.h"这个时候我该怎么办呢?这个问题其实困扰了我N百十年了,也不知道我上面的叙述时候清楚。请高手指教一二!
=========
在B中为什么不能用AView.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 ();
}
你是不是在对话框类B类中直接加了#include "xxxView.h"啊,这样不行,应该这样写:
#include "rrrrDoc.h"
#include "rrrrView.h"要将文档类的头文件先加上去,因为视图类中引用了文档,所以如果不加的话会出现:
语法错误 : 缺少“;”(在“*”的前面) 这样的错误
出错的原因并不是AView.cpp中引用了B.h,
而是AView.h中有一个内联函数:CXXXXDocument* CGetDocument(){ }
这里用到文档类,所以要先包含文档类的头文件。
定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样:一编译,就出现了一个互包含的问题了。LZ可以查阅:http://hi.baidu.com/doctorjohnson/blog/item/ebbdd934a6499f375ab5f513.html