Эта проблема меня смутила. Первая часть кода отлично работает без сбоев, она отлично от s1 до s2. Но вторая группа кода приводит к сбою программы.проблема с перегрузкой оператора оператора
У кого-нибудь есть идеи, почему это происходит или что может быть проблема?
Код 1: (работ)
s1.add(10, 30, 25, "Test Screen", false);
s1.add(13, 10, 5, "Name:XXX", false);
s1.add(13, 18, 30);
s1.remove(-1);
Screen s2 = s1;
Код 2: (падает на присвоение) оператор
Screen s1;
if (1 != s1.add(10, 30, 25, "Test Screen", false))
message("first add() has a problem");
else if (2 != s1.add(13, 10, 5, "Name:XXX", false))
message("second add() has a problem");
else if (3 != s1.add(13, 18, 30))
message("third add() has a problem");
else if (3 != s1.remove(-1))
message("first remove() has a problem");
else {
Screen s2 = s1;
}
Назначение для класса экрана:
Screen& operator=(const Screen &scr) {
if (this != &scr){
for (int i = 0; i < 50; i++) {
if (fields[i])
delete fields[i];
fields[i] = new LField();
}
for (int i = 0; i < scr.numOfFields; i++)
fields[i] = scr.fields[i];
numOfFields = scr.numOfFields;
currentField = scr.currentField;
}
return *this;
}
Оператор присваивания для класса Field :
LField& operator=(const LField &lfieldobj) {
if (this != &lfieldobj) {
if (lfieldobj.val) {
if (val)
delete[] val;
val = new char[strlen(lfieldobj.val) + 1];
strcpy(val, lfieldobj.val);
}
else{
//val = new char[1];
val = "";
}
rowNum = lfieldobj.rowNum;
colNum = lfieldobj.colNum;
width = lfieldobj.width;
canEdit = lfieldobj.canEdit;
index = lfieldobj.index;
}
return *this;
}
Любой вход был бы оценен с благодарностью :)
Не видя определения оператора присваивания, на это невозможно ответить. –
Вы уверены, что он сработал при задании? 's2' выйдет за рамки, как только он будет создан, так что, возможно, это проблема с деструктором? – Chowlett
Я добавил уступки оператора оператора. Я уверен, что в коде, который сбой, я прокомментировал назначение, и он отлично работает. – michael