我建了一个单文档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百十年了,也不知道我上面的叙述时候清楚。请高手指教一二!

解决方案 »

  1.   

    因为在B.cpp中不能再引用"AView.h"
    =========
    在B中为什么不能用AView.h啊?可以用的吧
      

  2.   

    //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 ();
    }
      

  3.   

    我知道楼主的问题了,
    你是不是在对话框类B类中直接加了#include "xxxView.h"啊,这样不行,应该这样写:
    #include "rrrrDoc.h"
    #include "rrrrView.h"要将文档类的头文件先加上去,因为视图类中引用了文档,所以如果不加的话会出现:
    语法错误 : 缺少“;”(在“*”的前面) 这样的错误
      

  4.   

    可以用的,不过在加的时候要像我上面说的那样,先加文档类的头文件。
    出错的原因并不是AView.cpp中引用了B.h,
    而是AView.h中有一个内联函数:CXXXXDocument* CGetDocument(){  }
    这里用到文档类,所以要先包含文档类的头文件。
      

  5.   

    C++ 之类的前置声明问题:
        定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样:一编译,就出现了一个互包含的问题了。LZ可以查阅:http://hi.baidu.com/doctorjohnson/blog/item/ebbdd934a6499f375ab5f513.html