基础问题:不能通过对话框类的构造函数传递参数吗? 在线等。。。。

zjliujun 2005-12-11 10:42:06
我有个对话框类,为了把参数传递过来显示,增加了个构造函数:
class CExpertInfo : public CDialog
{
public:
CString strUserName; //这些都是需要在对话框中显示的信息
CString strNickName;
CString strFace;
CString strCredit;
int extLevelUp;
int iColumnID;

CExpertInfo(CWnd* pParent = NULL); // 标准构造函数
CExpertInfo(CString UserName,CString NickName,CString Face,CString Credit,int LevelUp,int ColumnID); //我增加的构造函数
virtual ~CExpertInfo();
}

然后我在View中调用这个对话框,同时把参数传递过去:
CExpertInfo ExpertDlg("ChangHua","大侠","1.gif","100",5,1);
ExpertDlg.DoModal();
为什么一到ExpertDlg.DoModal()这里就出现断言错误呢?
...全文
185 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjroland 2005-12-11
  • 打赏
  • 举报
回复
我上面的试用证明了自己的猜测,是原来的构造函数中CExpertInfo::IDD, pParent没有在新构造函数中定义的缘故。Mackz(在相互) 也猜到这个原因,但他的用法是错误的,会产生pParent没有定义的错误。
谢谢各位,给分。
菜牛 2005-12-11
  • 打赏
  • 举报
回复
CExpertInfo::CExpertInfo(CString UserName,CString NickName,CString Face,CString Credit,int LevelUp,int ColumnID, CWnd* pParent /*=NULL*/)
: CDialog(CExpertInfo::IDD, pParent)

{
strUserName=UserName;
strNickName=NickName;
strFace=Face;
strCredit=Credit;
extLevelUp=LevelUp;
iColumnID=ColumnID;

}
zjliujun 2005-12-11
  • 打赏
  • 举报
回复
试试这个:

CExpertInfo::CExpertInfo(CWnd* pParent /*=NULL*/,CString UserName,CString NickName,CString Face,CString Credit,int LevelUp,int ColumnID)
: CDialog(CExpertInfo::IDD, pParent),strUserName(UserName),strNickName(NickName),strFace(Face),strCredit(Credit),extLevelUp(LevelUp),iColumnID(ColumnID)
{
}
菜牛 2005-12-11
  • 打赏
  • 举报
回复
CExpertInfo::CExpertInfo(CString UserName,CString NickName,CString Face,CString Credit,int LevelUp,int ColumnID)
: CDialog(CExpertInfo::IDD, pParent)

{
strUserName=UserName;
strNickName=NickName;
strFace=Face;
strCredit=Credit;
extLevelUp=LevelUp;
iColumnID=ColumnID;

}
zjliujun 2005-12-11
  • 打赏
  • 举报
回复
追踪断言到这里出错:

dlgcore.cpp

INT_PTR CDialog::DoModal()
{
// can be constructed with a resource template or InitModalIndirect
ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
m_lpDialogTemplate != NULL);
}
zjliujun 2005-12-11
  • 打赏
  • 举报
回复
我也试过:

CExpertInfo::CExpertInfo(CString UserName,CString NickName,CString Face,CString Credit,int LevelUp,int ColumnID)
{
strUserName=UserName;
strNickName=NickName;
strFace=Face;
strCredit=Credit;
extLevelUp=LevelUp;
iColumnID=ColumnID;

}

也是同样错误。
zjliujun 2005-12-11
  • 打赏
  • 举报
回复
在CExpertInfo.cpp中

CExpertInfo::CExpertInfo(CWnd* pParent /*=NULL*/)
: CDialog(CExpertInfo::IDD, pParent)
{
}
CExpertInfo::CExpertInfo(CString UserName,CString NickName,CString Face,CString Credit,int LevelUp,int ColumnID):
strUserName(UserName),strNickName(NickName),strFace(Face),strCredit(Credit),extLevelUp(LevelUp),iColumnID(ColumnID)
{
}
BBirdlyh 2005-12-11
  • 打赏
  • 举报
回复
CExpertInfo(CWnd* pParent = NULL); // 标准构造函数. 中应该还有个参数就是对话框模版的资源号,没有模版怎么显示对话框啊
所以在字定义的构造函数中应加上默认构造函数的两个参数pParent和IDD,然后在字定义的构造函数中调用默认构造函数

菜牛 2005-12-11
  • 打赏
  • 举报
回复
把你增加的构造函数代码贴出来。
zjliujun 2005-12-11
  • 打赏
  • 举报
回复
断言信息:

Debug Assertion Failed!

dlgcore.cpp
line: 485

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧