一般的用MFC编写一个窗口是会有这么一段代码:
BOOL CMyApp::InitInstance()
{
m_pMainWnd=new CMainFrm;
((CMainFrm*)m_pMainWnd)->Create(NULL,"The MFC Application");
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}我想问的是第二句话为什么要将m_pMainWnd前面加一个(CMainFrm*)不加的话就会说 
error C2660: 'Create' : function does not take 2 parameters这是为什么????

解决方案 »

  1.   

    m_pMainWnd的类型是CWnd,故要强制转换。
      

  2.   

    CWnd类的Create()函数不是2参数的。
      

  3.   

    sorry,上面有错误,m_pMainWnd的类型是CWnd*.
      

  4.   

    那m_pMainWnd=new CMainFrm;这句话没有实现类型的转化吗???
      

  5.   

    这代码是appwizard自动加的吗 我在app的InitInstance()中没有找到啊
    CMainFrm这个类的基类是? 如果是CFrameWnd 你得注意 虽然CWnd中的Create();函数是一个虚函数 但是CFrameWnd中的Create()可不是虚函数了 可以看看msdn
    所以得强制转换
      

  6.   

    这代码不是用向导生成的!!我的意思是m_pMainWnd=new CMainFrm;这句话没有实现指针的赋值吗??
      

  7.   


        当然实现了指针的赋值,但m_pMainWnd的值仍然是CWnd*类型,而不是CMainFrm*类型(虽然它实际指向的是一个CMainFrm类型的对象)。因此,若你想调用CMainFrm类的非虚函数,则必须进行强制转换。
      

  8.   

    关键m_pMainWnd本身就是一个CWnd *类型的指针
    虽然你把它指向了一个new出来的CMainFrm对象 但是它本身是CWnd *类型的 只可以指向派生类CMainFrm的虚函数 我不知道你的CMainFrm基类是什么 如果是CFrameWnd的话 那么必须对指针进行强制的类型转换 因为CFrameWnd中的Create();并不是一个虚函数 基类的指针无法找到这个函数