| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Перегрузка операторов. [VS C++] |
| Автор: Macbeth 31.3.2010, 20:42 | ||
| Здравствуйте. Задание: Описать класс, 3 объекта, используя разные конструкторы; объект №3 увеличить в раза(operator*), удвоением каждого символа("abc" ---> "aabbcc"); сложить(operator+) объекты № 3 и №2, затем присвоить(operator=) это объекту №1. Вот такой код сейчас. Выбивает ошибку, когда инициализирую объект L3. "illegal, left operand has type Row * " "illegal, right operand has type Row* " Очень прошу помочь исправить.
|
| Автор: smalcom 31.3.2010, 23:30 | ||
Товарищи у вас на всех одна лаба чтоли? Хоть бы именна переменных поменяли.
Где выбивает догадаться надо? |
| Автор: Macbeth 31.3.2010, 23:38 | ||
Ошибся. Когда иниц. L1. Вот здесь(4 строка в main):
Немного разобрался, здесь должно быть что-то вроде: Row L1 = (*L3)*(*L3) + L2; * - между объектами L3 - произведение, остальное указатели(не знаю как по другому описать) |
| Автор: jonie 1.4.2010, 08:38 |
| L2 у вас тоже указатель, тоже надо разыменовывать.... |
| Автор: xvr 1.4.2010, 15:09 |
| В коде куча ошибок - в строках 38, 54, 55, 62, 73 Операторы (в строках 18-20) заданны не правильно (они должны принимать const Row& и возвращать Row) Оператор * вообще задан неправильно - он должен умножать на int, а не на Row |
| Автор: Macbeth 1.4.2010, 16:45 | ||
| Можно поподробнее о ошибке в конструкторе копирования и операторе * ? Заменил указатели ссылками, ошибки в размерах строчных массивов исправил.
При отладке в цикле где я удваиваю строку выбивает ошибку "Unhandled exception at 0x00412312". Что там не так? |
| Автор: Macbeth 1.4.2010, 17:01 | ||
| Строку (объект1) нужно удвоить и склеить с объект2 (инициализируется конструктором копирования - присваивается изначальное значение объект1, т.е. "abc" . Насчет параметра, Вы имеете ввиду сделать так
|
| Автор: ИванМ 1.4.2010, 17:41 | ||
это все в одном операторе * или это такая задача вообще?
я имею ввиду, что надо писать просто s1, а не s, коли вы пишете так: (const String& s1) |
| Автор: Macbeth 1.4.2010, 17:52 | ||
s3 = (s1*s1) + s2. Удвоение надо реализовать перегрузкой оператора * . Склеить перегрузкой оператора + .
Как же мне тогда инициализировать массив, для работы в цикле? (кстати, я забыл его скопировать сюда: t = s1.s) В s хранится строка. |
| Автор: ИванМ 1.4.2010, 17:57 |
сомневаюсь что так по идеи должно быть s3 = (s1*2) + s2 s1 это объект String. У него нет метода s. Не понимаю о чем вы говорите |
| Автор: Macbeth 1.4.2010, 18:17 | ||
Разве так нельзя обращаться к private части? |
| Автор: ИванМ 1.4.2010, 18:22 |
к private части можно обращаться только из этого же класса, и в private части класса AnsiString такого члена (s) тоже нет |
| Автор: Macbeth 1.4.2010, 18:42 |
| Я наверное чего-то не понимаю. Причем тут AnsiString? И вроде бы я из того же класса обращаюсь к s. |
| Автор: ИванМ 1.4.2010, 18:47 | ||
| прошу прощения я вас дезинформировал я думал String это не ваш класс а стандартный почему то думал что вы работаете внутри Row Добавлено @ 19:00 вот например, код набросал для утроения строки из 4 символов: ins - входной массив, outs-выходной
для удвоения просто заменить n с 3 на 2 |
| Автор: xvr 1.4.2010, 20:26 | ||||
Можно. Коментарии в тексте
|
| Автор: Macbeth 1.4.2010, 23:40 | ||
| Взял код http://forum.vingrad.ru/index.php?showtopic=99006&view=findpost&p=752829 Добавил только свою перегрузку оператора * . Есть ли ошибки? Компилятор ругается уже в процессе компиляции.
|
| Автор: xvr 2.4.2010, 06:50 | ||||||
Есть
Ошибки -
|
| Автор: Macbeth 2.4.2010, 07:53 | ||
В цикле, где удваиваю строку.
Т.е. записать предыдущую строку в какой-нибудь темп, удалить строку, опять распределить память и записать темп? |
| Автор: xvr 2.4.2010, 10:26 | ||||||
Конкретный номер строки (по листигу из предыдущего поста) и текст ошибки от компилятора - телепаты в отпуске
- Можно выбросить старую переписку 5 годовой давности? - Можно, но перед тем, как выбростиь, обязательно разложите ее по адресатам и датам.
|
| Автор: Macbeth 2.4.2010, 11:55 | ||
#48 - "Unhandled exception at 0x00412312" upd. хм, отредактировал код, теперь в strlen.asm: "Unhandled exception at 0x1026f8e0 (msvcr90d.dll) in VALERON.exe: 0xC0000005: Access violation reading location 0xcccccccc" в строке: main_loop: mov eax,dword ptr [ecx] // здесь |
| Автор: xvr 2.4.2010, 13:26 | ||||||
Вот эта конструкция вообще 'шедевр'
|