![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| EvgenZ |
|
|||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
Знаю, что все просто, но сообразить не могу. Объясните пожалуйста где ошибка и из-за чего. Как исправить...
компилятор VS2005 -------------------- <удалено администрацией форума> |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Сколько секунд ты сэкономил, не набирая пробелы в коде, и сколько потерял я, пытаясь в нём разобраться…
Ошибки: 1) Сигнатура определения конструктора класса Array не соответствовала его объявлению (отсутствовал const). 2) Попытка обращаться к объектам типа Array, как a[index], не определив оператор [] или оператор преобразования к T*. 3) В функции zapolnenieAnimal производится попытка создания объекта типа Animal с одним параметром типа int, в то время как у этого класса есть конструктор без параметров и конструктор с двумя параметрами типа int. Код с исправлениями:
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| EvgenZ |
|
|||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
это значит, что все шаблонные классы должны содержать оператор [] ? А зачем перегруженный const? #include <cassert> - что такое? Это сообщение отредактировал(а) EvgenZ - 3.8.2006, 18:49 -------------------- <удалено администрацией форума> |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Нет. Но в данном случае он необходим, так как объекты класса Array в коде используются в качестве массивов. Заголовочный файл, подключённый для использования макроса assert. RTFM. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| EvgenZ |
|
|||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
насчет assert я тупанул
-------------------- <удалено администрацией форума> |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Без варианта с const компилятор не даст вызвать оператор для константного массива. Например, не скомпилируется такой код:
Кстати, GetSize в том случае тоже надо сделать константным. Вообще, не надо пренебрегать const: если метод не изменяет состояние объекта, надо делать его константным. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| GePo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 30.3.2003 Где: Москва Репутация: нет Всего: 3 |
Void, наверное это был вопрос про лишнюю перегрузку оператора []. Посмотри в код, если оставить одну константную перегрузку оператора, то и для обычного объекта метод будет работать. EvgenZ, естественно, можно оставить только одну константную перегрузку. --------------------
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
GePo, семантика Array подразумевает необходимость обоих вариантов. Если один из них (или оба) не используются в данной конкретной программе, это ничего не значит.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| GePo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 30.3.2003 Где: Москва Репутация: нет Всего: 3 |
Void, извнияюсь, не доглядел. Если я правильно понял, то под особенностью семантики подразумевается разница в возращаемых типах функциями - в одном случае - ссылка на объект, во-втором - ссылка на константный объект. ( это все-таки для ответа на вопрос EvgenZ)
--------------------
|
|||
|
||||
| EvgenZ |
|
|||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
Спасибо большое, у меня была мыслишка написать operator[], но я совершенно не подумал про const [].
-------------------- <удалено администрацией форума> |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |