Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Possible loss of data


Автор: frutta007 13.6.2008, 10:59
conversion from "ULONG" to "short", possible loss of data
Ребята подскажите плиз, гна что можно заменить, чтоб не было WARNING!!

Автор: georain 13.6.2008, 11:07
У тебя происходит преобразование типов где-то в 7 строчке от середины.
Если приведёшь свой код можно будет сказать что-то конкретное.

Автор: anatox91 13.6.2008, 11:07
компилятор тебе говорит что у тебя возможна потеря данных, т.к. ты из типа unsigned long, у которого диапазон значений где-то от 0 до 9 миллиардов(или больше, точно не помню) конвертируешь в short, у которого диапазон значений от -32 тыс. до + 32 тыс. (примерно)

Автор: andrew_121 13.6.2008, 11:28
anatox91 - Это с какого перепугу, у 32-ух битной переменной диаппазон 9 миллиардов ? smile 
Насколько я знаю, это: 4*1024*1024*1024 = 4294967296.
Цитата

short, у которого диапазон значений от -32 тыс. до + 32 тыс

Точнее: -32767 до 32768.

Автор: anatox91 13.6.2008, 11:29
ну да, попутал  smile смысл ошибки все равно то же

Автор: georain 13.6.2008, 11:31
Меня больше интересует как заставить новичков читать "вредные советы"? Или они их наоборот читают и выполняют?

Добавлено @ 11:39
Я вот не психолог, не знаю педагогично ли вместо ответа на вопрос отсылать в гоогле или учить как жить, но если этого не делать процесс обучения общению может затянутся, или нет? Я честно говоря не помню свой первый пост, пойду поищу чтоли, а то что-то я это.. извините

Автор: frutta007 16.6.2008, 19:14
Про код забыл сорри
 
C++

short CStreamOutput :: Write(char data)
{
    ULONG                         written = 0;
    Destination->Write(&data, 1, &written);

    return written;  вот на этой строке ошибка, т.е. не ошибка а Warning!!
}

пробовал пивать так:return (short)written  , но сказали это не сильно правильно
что можно сделать??

Автор: bronislav 16.6.2008, 19:39
например измени тип возвращаемого значения на ULONG

Код

ULONG CStreamOutput :: Write(char data)
{
    ULONG                         written = 0;
    Destination->Write(&data, 1, &written);

    return written;
}

Автор: frutta007 16.6.2008, 19:40
Пробовал и так тоже....в этом случае вообще Error возникает!!

Автор: bronislav 16.6.2008, 19:44
Цитата(frutta007 @  16.6.2008,  18:40 Найти цитируемый пост)
Пробовал и так тоже....в этом случае вообще Error возникает!! 

Ну да в классе, то он определен с типом short

А что функции write нужно обязательно передавать ULONG.

Попробуй сделать так:
Код

short CStreamOutput :: Write(char data)
{
    short written = 0;
    Destination->Write(&data, 1, &written);
    return written;
}

Автор: frutta007 16.6.2008, 19:48
уже разобрался...
надо было вот так

return ((written > SHRT_MAX) ? SHRT_MAX : (short)written);

спасибо за участие!!

Автор: bronislav 16.6.2008, 19:53
Цитата(frutta007 @  16.6.2008,  18:48 Найти цитируемый пост)
return ((written > SHRT_MAX) ? SHRT_MAX : (short)written);


Но от приведения типов ты так и не избавился ;)
Варнинг должен продолжать выскакивать или нет?

Автор: frutta007 16.6.2008, 19:58
Уже нет!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)