Я работаю в Visual C++ 2012.
Есть класс CSourceNUDialog : public CDialog
class CSourceNuDialog : public CDialog
{
//...
public:
void setTextsIntoEdits(char *s1, char *s2, char *s3, char *s4, char *s5, char *s6, char *s7, char *s8);
//...
};
В этом классе есть функция setTextsIntoEdits:
void CSourceNuDialog::setTextsIntoEdits(char *s1, char *s2, char *s3, char *s4, char *s5, char *s6, char *s7, char *s8)
{
m_IDC_EDIT1.SetWindowTextA(s1);
m_IDC_EDIT2.SetWindowTextA(s2);
m_IDC_EDIT3.SetWindowTextA(s3);
m_IDC_EDIT4.SetWindowTextA(s4);
m_IDC_EDIT5.SetWindowTextA(s5);
m_IDC_EDIT6.SetWindowTextA(s6);
m_IDC_EDIT7.SetWindowsTextA(s7);
m_IDC_EDIT8.SetWindowTextA(s8);
}
В вызывающей функции я пишу:
CSourceNuDialog mySourceNuDialog(this);
strcpy(s1,"a"); strcpy(s2,"b"); strcpy(s3,"c"); strcpy(s4,"d"); strcpy(s5,"e"); strcpy(s6,"f"); strcpy(s7,"g"); strcpy(s8,"h");
mySourceNuDialog.setTextsIntoEdits(s1,s2,s3,s4,s5,s6,s7,s8);
mySourceNuDialog.DoModal();
И в отладчике внутри функции setTextsIntoEdits на первой же строке
m_IDC_EDIT1.SetWindowTextA(s1);
программа бьётся с сообщением об ошибке:
Debug Assertion Failed!
Program: C:\Windows\system32\mfc110d.dll
File: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp
Line: 246
Что это означает? Как исправить эту ошибку?
1613 г. = 2024 г.
Здравствуйте, RussianFellow, Вы писали:
RF>В вызывающей функции я пишу:
RF>strcpy(s1,"a"); strcpy(s2,"b"); strcpy(s3,"c"); strcpy(s4,"d"); strcpy(s5,"e"); strcpy(s6,"f"); strcpy(s7,"g"); strcpy(s8,"h");
Что такое
s1? Скорее всего, это просто
char* s1;, что и ведёт к краху.
Исправь на
CString s1 = "a", s2 = "b" ...
mySourceNuDialog.setTextsIntoEdits(s1, s2 ...);
А ещё лучше в параметрах тоже заменить
char* s1 на
const CString& s1.
ЗЫ: Впрочем, даже если там
CString, всё равно в него нельзя писать через
strcpy, только через
CString s1;
strcpy(s1.GetBuffer(strlen("a")), "a");
, но зачем?
Здравствуйте, RussianFellow, Вы писали:
RF>Я работаю в Visual C++ 2012.
RF>Что это означает? Как исправить эту ошибку?
https://msdn.microsoft.com/ru-ru/library/fwz35s59.aspx
CDialog::OnInitDialog() — не забыл?
Здравствуйте, RussianFellow, Вы писали:
RF>RF>CSourceNuDialog mySourceNuDialog(this);
RF>strcpy(s1,"a"); strcpy(s2,"b"); strcpy(s3,"c"); strcpy(s4,"d"); strcpy(s5,"e"); strcpy(s6,"f"); strcpy(s7,"g"); strcpy(s8,"h");
RF>mySourceNuDialog.setTextsIntoEdits(s1,s2,s3,s4,s5,s6,s7,s8);
RF>mySourceNuDialog.DoModal();
RF>
До вызова mySourceNuDialog.DoModal(); никакие m_IDC_EDITX не существуют.
Стандартное решение — держать массив строк в диалоге, инициировать его, потом DoModal(); и в OnInitDialog() заполнить контролы. ПОСЛЕ CDialogEx::OnInitDialog();!