我加了一个odbc的动态集类然后在对话框中
BOOL CMnCourseSalaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
if (m_CourseSalaSet.IsOpen())
{
m_CourseSalaSet.Close();
}
m_CourseSalaSet.Open();//此时,出现断言错误
}我按重试,断言出现在
文件:c:\...\vc98\mfc\include\afx.inl
// CString
_AFX_INLINE CStringData* CString::GetData() const
{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }怎么回事?
BOOL CMnCourseSalaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
if (m_CourseSalaSet.IsOpen())
{
m_CourseSalaSet.Close();
}
m_CourseSalaSet.Open();//此时,出现断言错误
}我按重试,断言出现在
文件:c:\...\vc98\mfc\include\afx.inl
// CString
_AFX_INLINE CStringData* CString::GetData() const
{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }怎么回事?
m_CourseSalaSet = new CCourseSalaSet()
我只是把m_CourseSalaSet声明为类对象的数据成员,而不是类对象的指针的数据成员,所以加上
m_CourseSalaSet = new CCourseSalaSet()
肯定出错。按照c++的语法,类对象的数据成员会调用缺省的构造函数的。
_AFX_INLINE CStringData* CString::GetData() const
{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }
就反推回去啊,这个字符串为什么是空的,是不是Open函数里需要使用的什么字符串忘记给值了?
CString::GetData() line 122 + 34 bytes
CString::operator=(const CString & {""}) line 325 + 37 bytes
CRecordset::SetState(int -1, const char * 0x00000000, unsigned long 0) line 2269
CRecordset::Open(unsigned int 4294967295, const char * 0x00000000, unsigned long 0) line 1082
CMnCourseSalaDlg::OnInitDialog() line 55 + 29 bytes我打开另1个表的时候,没有出现断言,callstack如下:
CString::GetData() line 122
CString::AllocBeforeWrite(int 8) line 197 + 8 bytes
CString::AssignCopy(int 8, const char * 0x0012f578) line 315
CString::operator=(const char * 0x0012f578) line 346
CString::LoadStringA(unsigned int 57346) line 39
CLoginDlg::OnInitDialog() line 70
CString::AllocBeforeWrite(int 0) line 197 + 8 bytes
CString::AssignCopy(int 0, const char * 0x00000000) line 315
CString::operator=(const char * 0x00000000) line 346
CRecordset::SetState(int -1, const char * 0x00000000, unsigned long 0) line 2268
CRecordset::Open(unsigned int 4294967295, const char * 0x00000000, unsigned long 0) line 1082
CLoginDlg::OnInitDialog() line 80 + 23 bytes
CString::GetData() line 122
CString::AllocBeforeWrite(int 0) line 197 + 8 bytes
CString::AssignCopy(int 0, const char * 0x00000000) line 315
CString::operator=(const char * 0x00000000) line 346
CRecordset::SetState(int -1, const char * 0x00000000, unsigned long 0) line 2268
CRecordset::Open(unsigned int 4294967295, const char * 0x00000000, unsigned long 0) line 1082
CLoginDlg::OnInitDialog() line 80 + 23 bytes
AfxDlgProc(HWND__ * 0x004905fe, unsigned int 272, unsigned int 853520, unsigned int 853520) line 35 + 14 bytes
代码如下:
BOOL CLoginDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CString strTemp;
strTemp.LoadString(IDS_COMMON_USER);
m_comboBox.InsertString(-1, strTemp);
strTemp.LoadString(IDS_ADMINISTRATOR);
m_comboBox.InsertString(-1, strTemp); m_comboBox.SetCurSel(0); if (m_userSet.IsOpen())
{
m_userSet.Close();
}
m_userSet.Open();
return TRUE; // return TRUE unless you set the focus to a control
}打开这个就有断言,callstack如下:
CString::GetData() line 122
CString::AllocBeforeWrite(int 0) line 197 + 8 bytes
CString::AssignCopy(int 0, const char * 0x00000000) line 315
CString::operator=(const char * 0x00000000) line 346
CRecordset::SetState(int -1, const char * 0x00000000, unsigned long 0) line 2268
CRecordset::Open(unsigned int 4294967295, const char * 0x00000000, unsigned long 0) line 1082
CMnCourseSalaDlg::OnInitDialog() line 55 + 29 bytes
AfxDlgProc(HWND__ * 0x000d05d8, unsigned int 272, unsigned int 1050182, unsigned int 1050182) line 35 + 14 bytes
CString::AllocBeforeWrite(int 0) line 197 + 8 bytes
CString::AssignCopy(int 0, const char * 0x00000000) line 315
CString::operator=(const char * 0x00000000) line 346
CRecordset::SetState(int -1, const char * 0x00000000, unsigned long 0) line 2268
CRecordset::Open(unsigned int 4294967295, const char * 0x00000000, unsigned long 0) line 1082
CLoginDlg::OnInitDialog() line 80 + 23 bytes
代码如下:
BOOL CMnCourseSalaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
if (m_CourseSalaSet.IsOpen())
{
m_CourseSalaSet.Close();
}
m_CourseSalaSet.Open();//此时,出现断言错误
}
太奇怪了,为什么????