我得一个对话框对应的类头文件中再多定义一个变量就出错!

解决方案 »

  1.   

    一般的情况下是不会的,大多数情况是自己出的错.极端的情况是:
    Dialog类的对象通常是创建在栈上的,(特别是模态dialog),所以受到栈的大小限制.如果你的类定义中使用了大量地内存.如果楼主真得想解决问题,就应该把你的定义贴出来.
      

  2.   

    我确实是占用了大量内存,代码如下,如果在多定义一个对话框就无法打开,看有没解决的办法!
    多谢了!
    class CPair : public CDialog
    {
    // Construction
    public:
    void UDsort_k(int n);
    void UDsort_f(int n);
    void MarkStrXY(CString sign);
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    // HICON m_hIcon;
    void PairUpDown();
    void NoUpDown();
    void SelectKF();
    float k1_add_k2;
    int select_number_k,select_number_f;
    CString type;
    float errK,errF;
    float fErrorK;//调接K值误差
    int iResultNum;
    CDataGet DataGet,DataGet1,DataGet2,DataGet3,DataGet4,DataGet5;
    void sort_f(int n);
    void sort_k(int n);
    void IndataToStr();
    void FormClear();

    CPair(CWnd* pParent = NULL);   // standard constructor
    void SaveInfo(CString name,CString type,CString date,int num,float Quality,float UpK,float DownK,float UpF,float DownF,CString FKUp,CString FKDown);
    int UpDown;
    struct KArray//存储k值的数组
    {
    int i1,i2;
    }select_k[350];
    struct FArray//存储f值的数组
    {
    int j1,j2;
    }select_f[350];
    struct TestDataArray
    {
    int n;
    float f,k;

    }str[11][21],UpStr[11][21],DownStr[11][21];
    struct PairInfo
    {
    int n;
    float UpK,DownK,UpF,DownF,f;
    bool UpDown;
    CString FKUp,FKDown;
    }PairInfo[100];
    // Dialog Data
    //{{AFX_DATA(CPair)
    enum { IDD = IDD_Pair };
    CComboBox m_type;
    CListBox m_list;
    COleDateTime m_date;
    float m_frequency;
    CString m_name;
    int m_num;
    float m_weight;
    float m_f1f2;
    //}}AFX_DATA
    // Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CPair)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL// Implementation
    protected:
    CToolTipCtrl m_tooltip; // Generated message map functions
    //{{AFX_MSG(CPair)
    afx_msg void Onpair();
    afx_msg void OnSavePair();
    virtual BOOL OnInitDialog();
    afx_msg void OnButton1();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };//{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_PAIR_H__E2201721_FACA_11D6_8133_00E04C3BF642__INCLUDED_)
      

  3.   

    用new动态分配内存就在堆上了
      

  4.   

    CPair:: CPair()
    {
    m_pselectk = new KArray[350];
    ...
    }
    CPair ::~CPair ()
    {
    delete m_pselectk;
    }
      

  5.   

    就事论事,你的内存占用并不是很大,只是有几个对象
    CDataGet DataGet,DataGet1,DataGet2,DataGet3,DataGet4,DataGet5;
    不知其大小.话说回来,有三种方法解决这类问题.
    1. 调整栈的缺省大小.(不建议),使用Setting->link->output->stack allocation修改.
    2. 不修改其CPair类,而将其建于堆上.(强烈推荐)相信你的原有代码.
       CPair dlg();
       dlg.DoModal();
      改为
       CPair* pDlg=new CPari();
       pDlg->DoModal():
       delete pDlg;
    3. 修改CPair类,将其部份变量改在堆上申请.(一般推荐)
       struct PairInfo
      {
    int n;
    float UpK,DownK,UpF,DownF,f;
    bool UpDown;
    CString FKUp,FKDown;
      }PairInfo[100];
    改为  
      class PairInfo
      {
      public:
             int n;
    float UpK,DownK,UpF,DownF,f;
    bool UpDown;
    CString FKUp,FKDown;
      };
      PairInfo *m_pInfoTable在你的constructor中
       m_pInfoTable= new PairInfo[100];
    在你的destructor中
       delete []m_pInfoTable;