Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/55: Рейтинг темы: голосов - 55, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 27.02.2010
Сообщений: 190

Можно ли объявить переменную в if

08.11.2012, 02:37. Показов 10607. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  public static Matrix operator +(Matrix A, Matrix B)
    {
        int i, j;
        if (Matrix.option == 1) Matrix r = new Matrix();
        else
        {
            Matrix r = new Matrix(0, fileMasStolbcov, fileMasStrok);
        }
            for (i = 0; i < A.n; i++)
                for (j = 0; j < A.m; j++)
                    r.matr[i, j] = A.matr[i, j] + B.matr[i, j];
            return r;
        
    }
В данном случае пишет ошибку:
Embedded statement cannot be a declaration or labeled statement
В if нельзя вообще ничего объявлять что ли?
И еще один момент - когда я добавляю скобки к первому выражению после if
C#
1
if (Matrix.option == 1) {Matrix r = new Matrix();}
Ошибка уже в другой строке:
C#
1
 r.matr[i, j] = A.matr[i, j] + B.matr[i, j];
The name 'r' does not exist in the current context

Я не знаю почему так и как решить эту проблему. Дело в том, что в одном случае при выделении памяти с помощью new Matrix() должен срабатывать один конструктор, в другом - другой.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2012, 02:37
Ответы с готовыми решениями:

Можно как-то объявить переменную, чтобы к ней можно было обратиться с любой из форм?
У меня такой вопрос) Пишу курсовую работу, состоит из 3 форм, есть пару переменных, которые нужно сохранять при переходе на другую форму....

Можно ли объявить переменную типа IOPCServer?
Делаю OPC-клиент по примеру. Есть момент, когда в классе объявляется переменная, в которая по идее будет выполнять подключение к серверу...

Можно ли объявить переменную как модуль
Доброго времени суток. Сразу перейду к проблеме. Так вот, есть модуль (самый обычный модуль, содержащий константу): Module Module1 ...

5
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.11.2012, 02:54
В данном случае пишет ошибку:
Embedded statement cannot be a declaration or labeled statement
C#
1
2
if (Matrix.option == 1) 
   Matrix r = new Matrix();
А в чем смысл данного выражения?
С точки зрения компилятора, смысла тут никакого.

Я не знаю почему так и как решить эту проблему.
Область видимости.
Переменная существует только в пределах открывающей и закрывающей фигурных скобок, между которыми она была объявлена.
Вынесите объявление за пределы условия, а в самом условии проводите только инициализацию.
0
34 / 34 / 3
Регистрация: 12.10.2011
Сообщений: 175
08.11.2012, 03:25
так будет тебе счастье
C#
1
2
3
4
5
6
7
8
9
  public static Matrix operator +(Matrix A, Matrix B)
    {
        int i, j;
        Matrix r = Matrix.option == 1 ? new Matrix() : new Matrix(0, fileMasStolbcov, fileMasStrok);
 
            for (i = 0; i < A.n; i++)
                for (j = 0; j < A.m; j++)
                    r.matr[i, j] = A.matr[i, j] + B.matr[i, j];
            return r;
}

если я все правильно помню, тело условия if не может начинаться с выражения:
<тип> <имя_переменной> = <значение>
0
713 / 680 / 126
Регистрация: 30.03.2012
Сообщений: 1,124
08.11.2012, 08:43
Цитата Сообщение от dotFive Посмотреть сообщение
если я все правильно помню, тело условия if не может начинаться с выражения:
<тип> <имя_переменной> = <значение>
может
а вот состоять только из него (без фигурных скобок) не может, потому что переменная объявляется и на следующей строчке уже больше недоступна и все.
0
73 / 73 / 3
Регистрация: 04.09.2012
Сообщений: 170
08.11.2012, 09:21
вот так точно будет счастье.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  public static Matrix operator +(Matrix A, Matrix B)
    {
        int i, j;
        Matrix r;
        if (Matrix.option == 1) r = new Matrix();
        else
        {
            r = new Matrix(0, fileMasStolbcov, fileMasStrok);
        }
            for (i = 0; i < A.n; i++)
                for (j = 0; j < A.m; j++)
                    r.matr[i, j] = A.matr[i, j] + B.matr[i, j];
            return r;
        
    }
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.11.2012, 09:42
Цитата Сообщение от bosscs Посмотреть сообщение
В if нельзя вообще ничего объявлять что ли?
Не нужно. Ну объявил ты. Дальше что? Даже если объявление не закрывается со скобкой, то получаем непредсказуемость существования переменной. А если закрывается?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2012, 09:42
Помогаю со студенческими работами здесь

Можно ли в цикле for объявить более чем одну переменную?
Господа, подскажите пожалуйста совершенно нелепый вопрос. Можно ли в цикле for объявить более чем одну переменную ? До сегодняшнего дня...

Как можно в классе объявить переменную типа DateTime?
Подскажите, пожалуйста, как можно в классе объявить переменную типа DateTime? Получается: Ошибка error C3265: нельзя объявлять управляемый...

Как объявить глобальную переменную чтобы ее можно было применять на любой форме?
Привет народ ! подскажите пожалуйста как мне объявить глобальную переменную в C# чтобы я ее мог применять на любой форме. public...

Как объявить переменную что бы ее можно было передавать из одного обработчика событий в другой
как объявить переменную что бы ее можно было передавать из одного обработчика событий в другой пример из private: System::Void...

Есть хоть один язык программирования, в котором переменную или функцию можно объявить после её использования?
Хочу в своём такое реализовать, но так значительно увеличится скорость компиляции. Не знаю, стоит ли оно того.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru