|
Перегрузка операторов в IAR, не получается перегрузить оператор -> |
|
|
|
 |
Ответов
|
Sep 21 2005, 06:28
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(prottoss @ Sep 20 2005, 22:26) Кто нибудь знает как перегрузить оператор -> в IAR? struct U_Type { char a, b U_type *operator->() const { return this;} } На такую запись он ругается что надо ставить точку с запятой между оператор и ->. На другие варианты тоже. Запись по идее не перегружает оператор, а дублирует то что есть без перегрузки. Но в скобках можно написать что угодно... Кто нибудь использовал перегрузку? Во-первых, после b надо ставить ;. Во-вторых, оператор возвращает неизвестный тип: U_Type и U_type - это два разных типа. В-третьих, в конце определения типа надо тоже ставить ;. В-четвертых, функция объявлена как константная, и возвращаемое значение - не констатнта. Надо либо убрать const из определения функции, либо тип возврата квалифицировать словом const. В итоге код, приведенный ниже: Код struct U_Type { char a, b;
const U_Type *operator->() const { return this;} }; Вполне успешно компилируется. Выводы: внимательнее надо быть, раз, и язык немножко подучить, два.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Sep 21 2005, 06:35
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(dxp @ Sep 21 2005, 14:28) Во-первых, после b надо ставить ;. Во-вторых, оператор возвращает неизвестный тип: U_Type и U_type - это два разных типа. В-третьих, в конце определения типа надо тоже ставить ;. В-четвертых, функция объявлена как константная, и возвращаемое значение - не констатнта. Надо либо убрать const из определения функции, либо тип возврата квалифицировать словом const. В итоге код, приведенных ниже: Код struct U_Type { char a, b;
const U_Type *operator->() const { return this;} }; Вполне успешно компилируется. Я записываю правильно, просто в топике при наборе символов ошибся, однако у меня все равно компилятор ругается. Может в опциях что не так поставил?
--------------------
|
|
|
|
|
Sep 21 2005, 06:52
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(prottoss @ Sep 21 2005, 12:35) Цитата(dxp @ Sep 21 2005, 14:28) Во-первых, после b надо ставить ;. Во-вторых, оператор возвращает неизвестный тип: U_Type и U_type - это два разных типа. В-третьих, в конце определения типа надо тоже ставить ;. В-четвертых, функция объявлена как константная, и возвращаемое значение - не констатнта. Надо либо убрать const из определения функции, либо тип возврата квалифицировать словом const. В итоге код, приведенных ниже: Код struct U_Type { char a, b;
const U_Type *operator->() const { return this;} }; Вполне успешно компилируется. Я записываю правильно, просто в топике при наборе символов ошибся, однако у меня все равно компилятор ругается. Может в опциях что не так поставил? А зачем в топике это набирать?  Взял из редактора и скопировал. Что может быть проще и быстрее? Вот полный код, который подается на вход компилятору: Код struct U_Type { char a, b;
const U_Type *operator->() const { return this;} };
int main() { return 0; } Вот ключи компилятора: %IAR%\%AVR%\bin\iccavr.exe slon.cpp -lC slon.lst -e --ec++ --cpu=m128 -ms -s9 -r -I%IAR%\%AVR%\inc -I%IAR%\%AVR%\inc\dlib Вот листинг: Код ############################################################################## # # # 21/Sep/2005 13:48:59 # # IAR Atmel AVR C/C++ Compiler V4.10B/W32, Evaluation Version # # Copyright 1996-2005 IAR Systems. All rights reserved. # # # # Source file = slon.cpp # # Command line = slon.cpp -lC slon.lst -e --ec++ --cpu=m128 -ms -s9 -r # # -ID:\CAD\IAR\AVR\avr\inc -ID:\CAD\IAR\AVR\avr\inc\dlib # # --diag_suppress=Pe951 # # List file = slon.lst # # Object file = slon.r90 # # # # # ##############################################################################
D:\slon\IAR\AVR\!V4\03_Overload\slon.cpp 1 2 struct U_Type 3 { 4 char a, b; 5 6 const U_Type *operator->() const { return this;} 7 }; 8
\ In segment CODE, align 2, keep-with-next 9 int main() \ main: 10 { 11 return 0; \ 00000000 E000 LDI R16, 0 \ 00000002 E010 LDI R17, 0 \ 00000004 9508 RET 12 } 13
Maximum stack usage in bytes:
Function CSTACK RSTACK -------- ------ ------ main() 0 2
Segment part sizes:
Function/Label Bytes -------------- ----- main() 6
6 bytes in segment CODE 6 bytes of CODE memory
Errors: none Warnings: none
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
prottoss Перегрузка операторов в IAR Sep 20 2005, 16:26 sergeeff Цитата(prottoss @ Sep 20 2005, 19:26)Кто нибу... Sep 21 2005, 05:50 prottoss Цитата(sergeeff @ Sep 21 2005, 13:50)Work in ... Sep 21 2005, 06:12  Old1 Цитата(prottoss @ Sep 21 2005, 09:12)Угу, жал... Sep 21 2005, 06:19   prottoss Я не копировал свою структуру, потому что чувствов... Sep 21 2005, 07:00    dxp Цитата(prottoss @ Sep 21 2005, 13:00)Я не коп... Sep 21 2005, 10:30     prottoss Цитата(dxp @ Sep 21 2005, 18:30)Цитата(protto... Sep 21 2005, 10:48      dxp Цитата(prottoss @ Sep 21 2005, 16:48)Однако п... Sep 21 2005, 12:19       prottoss Цитата(dxp @ Sep 21 2005, 20:19)Зачем же не н... Sep 21 2005, 12:32
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|