我以为一个类 如果里面有指针需要分配内存 要用指针实例化
//***************************************************************
//对象实例化
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;

return TRUE;
}
};mywin a;
//********************************************************
以上没有问题
以下却不行???????????????????
//***************************************************************
//指针实例化
class mywin:public CWinApp
{
public :
BOOL InitInstance()
{
myframe *my;
my=new myframe;
my->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd=my;

return TRUE;
}
};mywin *a;
a=new mywin;
a->InitInstance();
//********************************************************

解决方案 »

  1.   

    不知道你要问的是什么?
    mywin a;-〉调用构造函数实例化mywin *a;-〉申明一个指向mywin类对象的指针
    a=new mywin; -〉将指针指向一个new 的 mywin 类型的对象
    这两种都是可以的
    你不会把mywin *a;
    a=new mywin;
    a->InitInstance();
    放到*.cpp直接去编译吧,要放到函数中去
      

  2.   

    *****************************************
    BOOL InitInstance()
    {
    myframe *my;
    my=new myframe;
    my->ShowWindow(SW_SHOWMAXIMIZED);
    m_pMainWnd=my;

    return TRUE;
    }
    ***********************************************************
    这个我可以改成
    ************************************************************
    BOOL InitInstance()
    {
    myframe my;
    //my=new myframe;
    my.ShowWindow(SW_SHOWMAXIMIZED);
    m_pMainWnd=&my;

    return TRUE;
    }
    *********************************************************
    好象不行
      

  3.   

    楼上说的很清楚了啊。估计他就是没放到函数中直接new了
      

  4.   

    你第一个认为正确的程序好像没有写完阿,mywin a;然后呢?你写了什么??
      

  5.   

    是的
    就是手写的mfc 的程序
    四个类
      

  6.   

    #include <afxwin.h>
    #include <afxext.h>
    #include "resource.h"UINT tool[]=
    {
    ID_SHAPES_RECTANGLE,
        ID_SHAPES_CIRCLE,
    ID_SHAPES_LINE
    };UINT stat[]=
    {
    0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
    };class myframe:public CFrameWnd
    {
    public:
    CToolBar t;
    CStatusBar s;
    char shape;
        int width;
    char tag; myframe()
    {
    Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
    MAKEINTRESOURCE(IDR_MENU1));
    shape='s';
    width=1;
    tag='t';
    } BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
    {
    t.Create(this);
    s.Create(this);
    t.LoadBitmap(IDB_BITMAP1);

    t.SetButtons(tool,4);

    s.SetIndicators(stat,3);
    return TRUE;
    } void rect()
    {
    shape='r';

    Invalidate();
    } void circ()
    {
    shape='c';
    Invalidate();
    } void line()
    {
    shape='l';
    Invalidate();
    } void thin()
    {
    width=2;
    } void thick()
    {
    width=5;
    } void solid()
    {
    tag='s';
    } void pattern()
    {
    tag='h';
    } void OnPaint()
    {
    CPaintDC d(this);
    CPen *p;
    p=new CPen;
    p->CreatePen(PS_SOLID,width,RGB(255,0,0));
    d.SelectObject(p); CBitmap *k;
    k=new CBitmap;
    k->LoadBitmap (IDB_BITMAP2);        CBrush *b;
    b=new CBrush;
    if(tag=='h')
    b->CreatePatternBrush(k); 
        else if(tag=='s')
    b->CreateSolidBrush (RGB(0,0,255));
    if(shape=='r')
    {
    d.Rectangle(0,0,200,200);

    }
    else if(shape=='c')
    {
    d.Ellipse (100,120,200,220);
    }
    else if(shape=='l')
    {
    d.MoveTo (100,100);
        d.LineTo (200,400);

    }
    } DECLARE_MESSAGE_MAP()
    };BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
      ON_COMMAND(ID_SHAPES_CIRCLE,circ)
      ON_COMMAND(ID_SHAPES_LINE,line)
      ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
      ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
      ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
      ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
      ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
      ON_WM_PAINT()
    END_MESSAGE_MAP()
    class mywin:public CWinApp
    {
    public :
    BOOL InitInstance()
    {
    myframe *my;
    my=new myframe;
    my->ShowWindow(SW_SHOWMAXIMIZED);
    m_pMainWnd=my;

    return TRUE;
    }
    };mywin a;
    ***************************
    全部程序如上
      

  7.   

    mywin *a;
    a=new mywin;
    a->InitInstance();
    这段代码放在什么位置的?
    如果放在mywin a;的位置做的替换的话肯定不行三
    这和类里面有指针什么的完全没有关系。
      

  8.   

    #include <afxwin.h>
    #include <afxext.h>
    #include "resource.h"UINT tool[]=
    {
    ID_SHAPES_RECTANGLE,
        ID_SHAPES_CIRCLE,
    ID_SHAPES_LINE
    };UINT stat[]=
    {
    0,ID_INDICATOR_NUM,ID_INDICATOR_CAPS
    };class myframe:public CFrameWnd
    {
    public:
    CToolBar t;
    CStatusBar s;
    char shape;
        int width;
    char tag; myframe()
    {
    Create(0,"Hello",WS_OVERLAPPEDWINDOW,(CRect)0,0,
    MAKEINTRESOURCE(IDR_MENU1));
    shape='s';
    width=1;
    tag='t';
    } BOOL OnCreateClient(CREATESTRUCT *c,CCreateContext *p)
    {
    t.Create(this);
    s.Create(this);
    t.LoadBitmap(IDB_BITMAP1);

    t.SetButtons(tool,4);

    s.SetIndicators(stat,3);
    return TRUE;
    } void rect()
    {
    shape='r';

    Invalidate();
    } void circ()
    {
    shape='c';
    Invalidate();
    } void line()
    {
    shape='l';
    Invalidate();
    } void thin()
    {
    width=2;
    } void thick()
    {
    width=5;
    } void solid()
    {
    tag='s';
    } void pattern()
    {
    tag='h';
    } void OnPaint()
    {
    CPaintDC d(this);
    CPen *p;
    p=new CPen;
    p->CreatePen(PS_SOLID,width,RGB(255,0,0));
    d.SelectObject(p); CBitmap *k;
    k=new CBitmap;
    k->LoadBitmap (IDB_BITMAP2);        CBrush *b;
    b=new CBrush;
    if(tag=='h')
    b->CreatePatternBrush(k); 
        else if(tag=='s')
    b->CreateSolidBrush (RGB(0,0,255));
    if(shape=='r')
    {
    d.Rectangle(0,0,200,200);

    }
    else if(shape=='c')
    {
    d.Ellipse (100,120,200,220);
    }
    else if(shape=='l')
    {
    d.MoveTo (100,100);
        d.LineTo (200,400);

    }
    } DECLARE_MESSAGE_MAP()
    };BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
      ON_COMMAND(ID_SHAPES_CIRCLE,circ)
      ON_COMMAND(ID_SHAPES_LINE,line)
      ON_COMMAND(ID_SHAPES_RECTANGLE,rect)
      ON_COMMAND(ID_OBJECTS_PEN_THIN,thin)
      ON_COMMAND(ID_OBJECTS_PEN_THICK,thick)
      ON_COMMAND(ID_OBJECTS_BRUSH_PATTERNED,pattern)
      ON_COMMAND(ID_OBJECTS_BRUSH_SOLID,solid)
      ON_WM_PAINT()
    END_MESSAGE_MAP()
    class mywin:public CWinApp
    {
    public :
    BOOL InitInstance()
    {
    myframe my;//**************
    //my=new myframe;//**********************
    my.ShowWindow(SW_SHOWMAXIMIZED);//******************
    m_pMainWnd=&my;//**********************

    return TRUE;
    }
    };mywin a;
    ***************************
    改成这个程序后没错误,但程序一闪而过
      

  9.   

    用指针实例化,还是对象实例化,和类的内部实现没关系指针实例化后要delete
      

  10.   

    程序一闪而过是因为你的InitInstance()定义了局部的myframe my,一旦退出函数my就析构了。你所说的不行是什么不行?编译?运行?出什么样子的错?
    mywin *a;
    a=new mywin;
    ////////////->InitInstance();去掉这一行试试。
      

  11.   

    退出函数my就析构了 是的 但是
    m_pMainWnd=&my;
    把地址记下来了
      

  12.   

    用变量方式时,my是局部变量,在InitInstance()结束后就销毁了,所保存的m_pMainWnd也成了无效指针...用new时,窗口不会被销毁,如是而已!