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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка Е2015 (все тот же билдер), Ambiquity between ... 
:(
    Опции темы
Гость_Alex
Дата 13.7.2004, 21:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите
осталась одна ошибка (после 7 дневных мук)

для этой строки *(short*)buf = SwitchIndian((short)len);

компилятор выдает Е2015 Ambiquity between 'SwitchIndian(unsigned short)' and 'SwitchIndian(unsigned long)'

2 функции SwitchIndian описаны ранее так:

WORD SwitchIndian(WORD n1)
{
#ifndef LOWBYTEFIRST
WORD n2;

char* ps=(char*)&n1;
char* pd=(char*)&n2;
pd[1] = ps[0];
pd[0] = ps[1];

return n2;
#else
return n1;
#endif
}

DWORD SwitchIndian(DWORD n1)
{
#ifndef LOWBYTEFIRST
DWORD n2;

char* ps=(char*)&n1;
char* pd=(char*)&n2;
pd[3] = ps[0];
pd[2] = ps[1];
pd[1] = ps[2];
pd[0] = ps[3];

return n2;
#else
return n1;
#endif
}


ЧТО ДЕЛАТЬ ГОСПОДА!!!!


  Вверх
chipset
Дата 13.7.2004, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Не приводи к (short) приводи к (WORD) или (DWORD)...
Вообще странно что он у тебя заработал, на глобальные функции разве действует перегрузка?


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Fantasist
Дата 13.7.2004, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Забавно. Это интересно, в стандарте так же, что приоритета в преобразовании между такими типами нет, или просто компилятор такой?

В любом случае, я бы предложил такой вариант:

Код


template <typename T>
inline void swap(T& c1, T& c2)
{
      c1^=c2;
      c2^=c1;
      c1^=c2;
}

template <typename T>
T SwitchIndian(T n1)
{
#ifndef LOWBYTEFIRST

int bytes = sizeof(n1);
char* p=(char*)&n1;

for (int i=0; i<bytes/2; ++i)
   swap(p[i],p[bytes-i]);

#endif

return n1;
}


Таким образом можно крутить любые типы. Правда есть одно но - компилятор в этом случае, как говорит Элджер, со словами "надеюсь, ты знаешь что делаешь", умывает руки. В том смысле, что тип можно подставить совершенно любой и компилятор никак тебе не подскажет, если это, допустим, какой-нибудь класс, который попал по ошибке. Хотя я думаю подобной проблеме в реале возникнуть не должно. В конце концов, ты ведь знаешь, что ты делаешь. smile.gif

Добавлено @ 23:44
Цитата(chipset @ 13.7.2004, 19:57)
Вообще странно что он у тебя заработал, на глобальные функции разве действует перегрузка?

Конечно, она на них действовала еще до того, как она начала действовать на класс-функции и операторы.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
lynx_916
Дата 14.7.2004, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Элджер

кто это, просвети плиз biggrin.gif


--------------------
Who dares, wins. (с) Solid Snake
PM MAIL ICQ YIM MSN   Вверх
Fantasist
Дата 14.7.2004, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Цитата(lynx_916 @ 14.7.2004, 10:39)
Цитата
Элджер

кто это, просвети плиз biggrin.gif

Это автор книги "С++ for Real Programmers" не помню как в русском варианте она называется, хотя у меня она именно в русском варианте. Реккомендую - классная книга.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Гость_Alex
Дата 14.7.2004, 21:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ребята!!!

Спасибо Всем большое - привел вместо (short) к (WORD) и все работает, и вообще наконец то сегодня она ЗАРАБОТАЛА, благодоря вашим советам.

Еще раз спасибо Всем - помощь на форуме первокласная, никогда такого раньше не встречал.
Если когда нибудь сделаю сайт - обязательно на форум ссылку поставлю (даже если она клеится там не будет)
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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