То, что объявлено внутри тела оператора if, не считается объявленным вне этого тела
Есть класс. Мне нужно по условию создать объект(ы), вызвав один из его конструкторов (несколько условий, несколько конструкторов). Но, как сказано в заголовке, то, что объявлено внутри тела оператора if
, не считается объявленным вне этого тела.
Таким образом: если условие срабатывает, то я создаю объект класса, вызывая нужный мне конструктор, и внутри тела этого условия могу работать с этим объектом, всё пока что замечательно.
НО как только я пытаюсь поработать с этим объектом ВНЕ тела if
, объект оказывается необъявленным. В итоге, работать я с ним не могу. И с обычными переменными тоже так же, но это не важно.
Приходится заранее создавать объекты (например, самым простым конструктором), а потом по if
они заново объявляются с нужным мне конструктором, и код запускается, но работает неправильно. Объект никак не меняется.
(и долго будет переделывать всё так, чтобы он по условию просто менялся, а не именно создавался с нужным конструктором, и это очень нежелательный вариант).
Я пробовал в начале после объявления объекта сразу его удалить/очистить/вызвать деструктор, но, как ни крути, нормально прога не работала.
Как это выглядит конкретно в коде:
int main ()
{
/*1*/КЛАСС объект1, объект2;
//Тут могут быть попытки сразу эти классы удалить/очистить/вызвать деструкто
if (условие)
{КЛАСС объект1(параметры нужного конструктора);
Вывод объекта1; //Всё хорошо!
}
if (другое условие)
{КЛАСС объект2(параметры нужного конструктора);
Вывод объекта2; //Всё хорошо!
}
if (ещё одно условие)
/*
создание 1 или 2 объекта
*/
/*
...
*/
Вывод объекта1; //Выводит неправильно, ибо внутри этого объекта записано не то,
//что мне нужно, а непонятно что
Вывод объекта2; //Если же я убираю строчку /*1*/, то, как сказано в заголовке,
//работать с объектами 1 и 2 я уже не могу. Компилятор говорит, что они не описаны.
return 0;
}
Скажите, пожалуйста:
ИЛИ как создавать объект в теле if
так, чтобы он считался описанным в main
и я мог с ним работать (думаю, нужно приписать какое-то нужное слово перед созданием объекта в теле if
, но какое???),
ИЛИ как мне в начале, после /1/, удалить/очистить/вызвать деструктор объектов 1 и 2 так, чтобы потом они в теле if
заново нормально создавались с нужными мне конструкторами, и при этом потом я мог нормально с ними потом работать, а не видеть какой-то бред в объектах. Или просто сделать нормальный деструктор, и просто его вызывать.
P.S. Думаю, это не играет особой роли в этой проблеме, т.к. она довольно обще описана, но класс состоит из int
-массива 5x5 и ещё одной int
, и несколькими конструкторами для нужного заполнения этого массива при создании, несколькими методов, несколькими перегрузками операторов, в общем, ничего необычного. И пока что вызвав после /1/ деструктор, в котором одна строчка - delete [] int_массив_5x5
, я добился, что в объект записывается то, что нужно - кроме первых двух столбцов, в которых какой-то бред.