看到的书上的用法总是在一个函数里将CPropertySheet实例化。比如:
void CxxxView::OnButtonTable() 
{
CMyProperSheet m_tbSheet("Analysis Table");
m_tbSheet.DoModal();
}
是否可以把CPropertySheet在view中实例化,宣言成view的成员。xxxView.h
... ...
   CMyProperSheet m_tbSheet;
可是这样的话会出现编译错误,应该怎么办?

解决方案 »

  1.   

    是不是h文件里面没有include而已,应该不会有问题的阿
      

  2.   

    错误是在xxxView.h文件一已经包含了MyProperSheet.h的情况下出现的
      

  3.   

    你的类CMyProperSheet 有缺省构造函数吗?如下:
    CMyProperSheet::CMyProperSheet()
    {
        AddPage(&m_page1);
        AddPage(&m_page2);
    }
      

  4.   

    如ruchimy(泥秋)所示 类CMyProperSheet 有缺省构造函数,可是还是出现编译错误
      

  5.   

    CStringView::CStringView()
    : m_DlgSheet("SheetCaption")
    {
    }
      

  6.   

    你要自己增加构造函数,这个构造函数不能有形参.类向导帮你增加的构造函数是像这样的:
    CMyPropertySheet::CMyPropertySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
    {
    }
    而这些构造函数如果你在CMyView没有明确m_sheet的初始化是不会调用的,它调用的是不带参数的CMyPropertySheet::CMyPropertySheet();
      

  7.   

    确实如 ruchimy(泥秋) 所说,
    可是,为什么CMyPropertySheet类不自动添加默认构造函数。
    而必须收动追加?
      

  8.   

    类向导可能希望我们编程能对各种对象作明确的初始化.这个才是编程的好习惯.明确的初始化就像 ghxmagic(ghxmagic)所说的:
    CStringView::CStringView()
    : m_DlgSheet("SheetCaption")
    {
    }
    这时m_xxsheet的初始化调用的就是向导为我们做好的构造函数(带参数).