编译时间错误C4407

gam*_*ags 4 mfc visual-c++-2008

我们的代码中有以下类结构

Class A: public CDialog, public Base1, public Base2
{
};
Run Code Online (Sandbox Code Playgroud)

在实施A类时,我们有以下内容:

BEGIN_MESSAGE_MAP( A, CDialog )
    ON_WM_SIZE()
END_MESSAGE_MAP()
Run Code Online (Sandbox Code Playgroud)

请注意,Base1和Base2不从CDialog或任何其他MFC类继承.

在VC6上,编译成功.但是在VC9上我们得到以下错误代码:

错误C4407:在成员表示的不同指针之间强制转换,编译器可能生成错误的代码.

此错误代码指向ON_WM_SIZE的位置.

有谁可能告诉我一个解决方案.提前致谢.

玩家

Ped*_*rão 5

我刚刚解决了这个问题的一个例子; 通过网络搜索发现了这个问题.

在我的例子中,我还有一个继承自多个类的对话框类:CDialog和ConfigurationTab,它是一个内部接口.通过更改以下内容使编译器警告静音:

class Foo : public ConfigurationTab, public CDialog
Run Code Online (Sandbox Code Playgroud)

有:

class Foo : public CDialog, public ConfigurationTab
Run Code Online (Sandbox Code Playgroud)

当一个违规对话框在一个DDX变量赋值时在ON_BN_CLICKED方法内崩溃时,我们发现了这种情况.当我们确定它被初始化时,DDX变量在该行神秘地未初始化.