• MFC日志(2011.4.10)


    1.关于超前引用

    这是个一般不太会接触到的问题,我是因为想要让view类和doc类之间的访问变得简单才遇到了这个问题。我的设想是:在doc类中设置一个指向view的成员变量,但是加上之后总提示我该类(view类)未被定义,我就奇了怪了,头文件也是包含过的,即view类和doc类的cpp文件中都包含了彼此的头文件。

    上网查了下,发现这个是C++的机制造成的,编译器在编译的时候只会根据头文件的顺序编译一次,在doc类的cpp中,是先包含的doc.h然后是view.h,因此,不可能在doc类中定义view类的指针,因为那时候view还没有包含进来。因此这种情况叫超前引用,网上原文如下:

    更一般的情况,类A和类B需要彼此互相引用,这样必然有一个类会先被定义,而另外一个类后被定义,这样在先被定义的类引用后被定义的类的时候,就导致了所谓的超前引用。
    超前引用导致的错误有以下几种处理办法:
    1) 使用类声明
    在超前引用一个类之前,首先用一个特殊的语句说明该标识符是一个类名,即将被超前引用。其使用方法是:
    a) 用class ClassB;声明即将超前引用的类名
    b) 定义class ClassA
    c) 定义class ClassB;
    d) 编制两个类的实现代码。
    上述方法适用于所有代码在同一个文件中,一般情况下,ClassA和ClassB分别有自己的头文件和cpp文件,这种方法需要演变成:
    a) 分别定义ClassA和ClassB,并在cpp文件中实现之
    b) 在两个头文件的开头分别用class ClassB;和class ClassA;声明对方
    c) 在两个cpp文件中分别包含另外一个类的头文件
    NOTE:这种方法切记不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针。

    上面的解决方法测试通过。另外还有两种方法,没有尝试,写在这留作存档。

    2) 使用全局变量
    由于全局变量可以避免超前引用,不用赘述。我的习惯是,把类对象的extern语句加在该类头文件的最后,大家喜欢
    怎样写那都没有什么大问题,关键是保证不要在头文件中胡乱包含。
    3) 使用基类指针。
    这种方法是在引用超前引用类的地方一律用基类指针。而一般情况下,两个互相引用的类并不涉及其基类,因此不会造成
    超前引用。以开始的例子说:在CMyDialog类中用CView
    *代替CMyView*,在CMyView类中用CDialog*代替CMyDialog*,这样必然
    不会造成超前引用。

    参考资料:http://www.vckbase.com/bbs/prime/viewprime.asp?id=431

    2.关于静态库下CRectTracker无法显示鼠标光标解决方案

    原因:

    当应用程序通过使用静态库链接到 MFC 时, MFC 资源被编译到应用程序的可执行文件。 应用程序的可执行文件将包括在 Afxres.rc 文件。 若要检查这,单击 资源包含 在 视图 菜单上。 在 Afxres.rc 文件拥有 CRectTracker 使用 MFC 源代码中的资源。    这些资源不是是 _AFX_NO_TRACKER_RESOURCES 时,包括只定义的。 BLOCKS32 项目具有 _AFX_NO_TRACKER_RESOURCES 定义的。 因此,它确实不置于应用程序的可执行映像 CRectTracker 需要的资源。 因此,没有任何所使用的 CRectTracker 游标会在生成该示例通过使用 MFC 静态时显示。

    解决方案

    在资源视图中,在rc中点击 Resource Includes,然后 删除以下行:    #define _AFX_NO_TRACKER_RESOURCES。

    参考资料:http://blog.csdn.net/qsycn/archive/2009/10/27/4733493.aspx


  • 相关阅读:
    一起谈.NET技术,ASP.NET应用下基于SessionState的“状态编程框架”解决方案 狼人:
    一起谈.NET技术,谈谈ASP.NET皮肤机制的实现 狼人:
    一起谈.NET技术,asp.net控件开发基础(9) 狼人:
    一起谈.NET技术,asp.net控件开发基础(11) 狼人:
    一起谈.NET技术,ASP.NET MVC 3 Beta初体验之实用的WebMail 狼人:
    一起谈.NET技术,关于Silverlight战略转移新闻,我的思考 狼人:
    一起谈.NET技术,ASP.NET MVC 3 Beta初体验之超酷的Chart:3D效果 狼人:
    一起谈.NET技术,asp.net控件开发基础(10) 狼人:
    一起谈.NET技术,asp.net控件开发基础(19) 狼人:
    一起谈.NET技术,asp.net控件开发基础(8) 狼人:
  • 原文地址:https://www.cnblogs.com/xweiwei/p/2011456.html
Copyright © 2020-2023  润新知