从网上看了不少方法,但是都牵扯到头文件相互包含的问题,
CTestView* pTestView; 
POSITION pos=GetFirstViewPosition(); 
pTestView=GetNextView(pos); 如果在文档类这么定义,必须包含视图类头文件,但是我视图类中已经包含了文档类的头文件,这样就导致程序出错了,怎么解决这个问题,或者有什么其他办法得到视图类指针呢?  求指点!!

解决方案 »

  1.   

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

  2.   

    头文件包含其实是一想很烦琐的工作,不但我们看着累,编译器编译的时候也很累,再加上头文件中常常出现的宏定义。感觉各种宏定义的展开是非常耗时间的,远不如自定义函数来得速度。我仅就不同头文件、源文件头文件包含代替不了前置声明。有的时候只能依靠前置声明来解决问题。
    在你的程序里,你引用了一个前置声明是指在程序员尚未给出完整定义之前对一个标示符(一个类型、一个变量或者一个函数)的声明。一个很简单的例子就是我们在函数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文件)。
      

  3.   

    在你的CDocument类的头文件里
    class CTestView;
    就行了然后在你的CDocument类的cpp里要包含TestView.h
      

  4.   

    不会存在相互包含的问题, 头文件都有 #pragma once ,关键是不要在.h文件里面包含.h, 在cpp文件里面包含 .h 文件就行。  就是在文档cpp包含view.h
      

  5.   

    偶的方法是:
    都到MainFrm.h里面引入要用到就引MainFrm.h真是方便。