Вопрос № 126300: Здравствуйте уважаемые эксперты.
Почему-то не работает перегрузка оператора >>
работаю с builder 6.0
...Вопрос № 126346: define для определения версии C++ Builder
Как в коде можно узнать версию текущего Builderа?
Т.е. мне нужно сделать, чтобы определенный код работал только для определенной версии, типа этой тестовой функции:
AnsiString testDef()<...Вопрос № 126401: Здравствуйте эксперты.
Не могу разобратся как передать в ассемблерную вставку значения размером в байт.
При передаче по значению ошибки не возникает, но при передаче по ссылке компиллятор почему-то выдает ошибку несовпадения размеров операнд...
Вопрос № 126.300
Здравствуйте уважаемые эксперты.
Почему-то не работает перегрузка оператора >>
работаю с builder 6.0
Отвечает: Терсков Сергей
Здравствуйте, Глымов Антип!
Для перегрузки таких операторов их нужно объявлять дружественными вашему классу. Исправленную версию смотрите в приложении.
Приложение:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 07.03.2008, 03:34 Оценка за ответ: 4 Комментарий оценки: А почему их нужно объявлять дружественными, ведь закрытые члены я не использую
Вопрос № 126.346
define для определения версии C++ Builder
Как в коде можно узнать версию текущего Builderа?
Т.е. мне нужно сделать, чтобы определенный код работал только для определенной версии, типа этой тестовой функции:
AnsiString testDef()
{
#ifdef VER_BCB6
return "BCB6";
#endif
Отправлен: 07.03.2008, 14:16
Вопрос задал: Igor_ (статус: 4-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sergey A. Wedensky
Здравствуйте, Igor_!
В справочной системе BCB нашел список предопределенных макросов. Привожу в приложении. Кажется, __BORLANDC__ Вам должен подойти. Возвращает версию компилятора, например в Builder 5.51 возвращает 0x551.
Приложение:
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 07.03.2008, 14:33 Оценка за ответ: 5 Комментарий оценки: Спасибо, похоже, что это поможет. Не совсем понятно, каким образом там числа задаются, но опытным путем выяснил, что для C++Builder 6 и C++Builder 2007 отличаются. Так что подойдет. Спасибо
Вопрос № 126.401
Здравствуйте эксперты.
Не могу разобратся как передать в ассемблерную вставку значения размером в байт.
При передаче по значению ошибки не возникает, но при передаче по ссылке компиллятор почему-то выдает ошибку несовпадения размеров операндов... (operand size conflict)
Передавать и принимать нужно именно байты, в том то и смысл.
Отвечает: kool
Здравствуйте, Вячеслав Шинкаренко!
Аккуратней нужно буковки печатать.
Правильно в приложении.
Удачи!
Приложение:
--------- I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 08.03.2008, 11:30 Оценка за ответ: 3 Комментарий оценки: да нет, это Вы не разобрались..
В первой строчке mov al,l я хочу занести в регистр al значение переменной l, которая передается функции rol. А в последних двух строчках: mov l,al or h,ah принять из неё уже измененные значения..
Так вот, если функцию определить так: inline void rol(byte h, byte l, byte bit_ct) то всё внутри функции работает, но
естественно значения не возвращаются. Чтобы возвращать значения логично было бы писать так: inline void rol(byte &h, byte &l, byte bit_ct). Но почему-то это не работает. Вот я и спрашиваю - почему?
Отвечает: Ross
Здравствуйте, Вячеслав Шинкаренко!
Не работает потому, что использование ссылок есть неявное использование указателей. Только в случае со ссылками, операции разыменования и взятия адреса компилятор оставляет за собой и код поэтому получается более удобочитаемым.
В ассемблерной вставке таких удобств уже нет, поэтому нужно либо явно использовать указатели, либо сохранять значения во временных переменных:
Приложение:
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 10.03.2008, 12:39 Оценка за ответ: 5 Комментарий оценки: Да я уже догадался по предыдущему ответу на минифорум. Но всеравно спасибо.