Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что я написал? map[mx, my] = 2; несовместимые типы в присваивании 
:(
    Опции темы
ne_tru_e
Дата 14.12.2012, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Приношу жертвы MS
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.1.2008

Репутация: нет
Всего: 4



Я исправил ошибку в коде, по старой паскалевской привычке я делал присваивание элементу двумерного массива так:
Код

  map[mx, my] = 2;


На что MinGW возмутился:
Код

27: ошибка: несовместимые типы в присваивании «int» -> «int [50]»


Конечно, надо писать так:
Код

  map[mx][my] = 2;


Однако мне стало интересно, что я написал в первом случае? smile  Ведь в C++ есть оператор запятая. Сам пока не могу определить.
Массив определен так:
Код

  int map[50][50];

PM WWW Jabber   Вверх
artsb
Дата 14.12.2012, 08:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Код

map[mx, my] = 2;

В данном случае, эта запись равносильна:
Код

map[my] = 2;

т.к. mx нигде не используется. В качестве индекса массива выступает my. Эта запись выдаст такую же ошибку.
А вот так вот:
Код

map[mx, my][0] = 2;

будет нормально. Это равносильно:
Код

map[my][0] = 2;

Т.е. получается, что вы указываете только первый индекс массива из двух. Вот компилятор и ругается.

Это сообщение отредактировал(а) artsb - 14.12.2012, 08:30


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
bsa
Дата 14.12.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(ne_tru_e @  14.12.2012,  07:39 Найти цитируемый пост)
Однако мне стало интересно, что я написал в первом случае?
Чтобы это понять нужно понимать, что из себя представляет многомерный массив в С/С++:
сделаем typedef:
Код
typedef int array[50];
Теперь у нас есть тип, с помощью которого можно объявить массив из 50-ти интов. Делаем теперь массив:
Код
array var[40];
Т.е. мы получили массив массивов из 50-ти интов. Что будет, если мы применим оператор [] к var? Естественно ссылка на указанный элемент массива. А элемент массива имеет тип array! Т.е. ему (теоретически) можно присваивать только типы array. Но никак не целые. Вот на это компилятор и ругнулся.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0925 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.