int nchoic=m_combobx.GetCurSel();
switch(nchoic) 
{ case0 :
pwndctrl=new CStatic;
((CStatic*)pwndctrl->Create(_T("static text"),WS_VISIBLE,CRect(180,40,300,70),this,1));
break;
其中用到函数pwndctrl->Create这条语句报错,error C2660: 'Create' : function does not take 5 parameters,CStatic::Create这个函数是5个参数没错啊,可是鼠标放在creat上时提示的是CWnd::Create,这个函数倒是7个参数,为什么会这样, CStatic不是从 CWnd派生来的吗,怎么解决啊?

解决方案 »

  1.   

    你原先的写法:((CStatic*)pwndctrl->Create( 相当于下面的代码:
    ((CStatic*)(pwndctrl->Create()),他是先调用Create函数,在把结果转换为CStatic*类型。所以会报错。楼上的写法是正确的。((CStatic*)pwndctrl)->Create把pwndctrl转为CStatic*类型,再调用Create函数。我是路过,帮楼上的解释一下。
      

  2.   

    虽然是继承关系,可是别忘了,他可以重新定义create函数,在内部调用基类的create,多余的参数可能用于别的地方.
      

  3.   

    ((CStatic*)pwndctrl)->Create
    不然编译器识别成别的了