как int const преобразовать в LONG?
От: Аноним  
Дата: 23.09.04 07:18
Оценка: :)
как int const преобразовать в LONG можно ли это сделать?
Re: как int const преобразовать в LONG?
От: Bell Россия  
Дата: 23.09.04 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>как int const преобразовать в LONG можно ли это сделать?


Конечно
int const n = 1;
long l = n;


Если имелось ввиду не это, то пожалуйста подробнее.
Любите книгу — источник знаний (с) М.Горький
Re[2]: как int const преобразовать в LONG?
От: Аноним  
Дата: 23.09.04 07:25
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>как int const преобразовать в LONG можно ли это сделать?


B>Конечно

B>
B>int const n = 1;
B>long l = n;
B>


B>Если имелось ввиду не это, то пожалуйста подробнее.


мне нужно значение, которое возвращает CImage::GetWidth, передать в другую процедуру в качестве long
Re[3]: как int const преобразовать в LONG?
От: Bell Россия  
Дата: 23.09.04 07:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>мне нужно значение, которое возвращает CImage::GetWidth, передать в другую процедуру в качестве long


Ну так передавай — в чем проблема-то?
Любите книгу — источник знаний (с) М.Горький
Re[4]: как int const преобразовать в LONG?
От: Аноним  
Дата: 23.09.04 07:34
Оценка: :)
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>мне нужно значение, которое возвращает CImage::GetWidth, передать в другую процедуру в качестве long


B>Ну так передавай — в чем проблема-то?


ругается
error C2664: cannot convert parameter 1 from 'int (void) throw() const' to 'LONG'
Re[3]: как int const преобразовать в LONG?
От: Кодт Россия  
Дата: 23.09.04 07:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>мне нужно значение, которое возвращает CImage::GetWidth, передать в другую процедуру в качестве long


class CImage
{
  ...
  int GetWidth() const; // const относится к классу, а не к возвращаемому значению
  ...
};

void foo(long arg);
void bar(const long& arg);
void buz(long& var);
template<class Numeric>
void xyz(Numeric arg);

...

void test(CImage const* ptr)
{
  foo( ptr->GetWidth() ); // возможен warning о конверсии с потерей данных
  bar( ptr->GetWidth() );

  buz( ptr->GetWidth() ); // ошибка: попытка конверсии rvalue в неконстантный lvalue

  xyz<long>( ptr->GetWidth() ); // принудительное указание параметра шаблона
  xyz( (long) ptr->GetWidth() ); // автоматический вывод параметра шаблона <- принудительное приведение типа
}

Ну и в чём проблемы?
Перекуём баги на фичи!
Re[5]: как int const преобразовать в LONG?
От: GarryIV  
Дата: 23.09.04 07:37
Оценка: +2
Hello, !

B>> Здравствуйте, Аноним, Вы писали:


А>>> мне нужно значение, которое возвращает CImage::GetWidth, передать в другую процедуру в

А>>> качестве long

B>> Ну так передавай — в чем проблема-то?


> ругается

> error C2664: cannot convert parameter 1 from 'int (void) throw() const' to
> 'LONG'

Скобки поставь у GetWidth().

WBR, Igor Evgrafov.
Posted via RSDN NNTP Server 1.9 gamma
WBR, Igor Evgrafov
Re[5]: как int const преобразовать в LONG?
От: LaptevVV Россия  
Дата: 23.09.04 07:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Bell, Вы писали:


B>>Здравствуйте, Аноним, Вы писали:


А>>>мне нужно значение, которое возвращает CImage::GetWidth, передать в другую процедуру в качестве long


B>>Ну так передавай — в чем проблема-то?


А>ругается

А>error C2664: cannot convert parameter 1 from 'int (void) throw() const' to 'LONG'
Судя по сообщению, передается вовсе не int const, а имя функции констатной функции, возвращающей int. Текст — в студию!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: как int const преобразовать в LONG?
От: Bell Россия  
Дата: 23.09.04 07:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Bell, Вы писали:


B>>Здравствуйте, Аноним, Вы писали:


А>>>мне нужно значение, которое возвращает CImage::GetWidth, передать в другую процедуру в качестве long


B>>Ну так передавай — в чем проблема-то?


А>ругается

А>error C2664: cannot convert parameter 1 from 'int (void) throw() const' to 'LONG'

Скобочки после имени функции поставить надо однако
Любите книгу — источник знаний (с) М.Горький
Re[5]: как int const преобразовать в LONG?
От: Кодт Россия  
Дата: 23.09.04 07:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ругается

А>error C2664: cannot convert parameter 1 from 'int (void) throw() const' to 'LONG'

В переводе на русский язык: "не могу преобразовать тип 'целочисленная функция без параметров и исключений'" к типу "32-битное целое".
Скобочки-то поставил? Или просто написал:
 long v = CImage::GetWidth;
Перекуём баги на фичи!
Re[4]: как int const преобразовать в LONG?
От: Bork СССР  
Дата: 23.09.04 23:51
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Аноним, Вы писали:


А>>мне нужно значение, которое возвращает CImage::GetWidth, передать в другую процедуру в качестве long


К>
К>class CImage
К>{
К>  ...
К>  int GetWidth() const; // const относится к классу, а не к возвращаемому значению
К>  ...
К>};

К>void bar(const long& arg);
К>void buz(long& var);

К>void test(CImage const* ptr)
К>{
К>  bar( ptr->GetWidth() );

К>  buz( ptr->GetWidth() ); // ошибка: попытка конверсии rvalue в неконстантный lvalue

К>}
К>


К>Ну и в чём проблемы?


проблема в том, что параметры передаются по ссылке. следовательно компилятор полагает, что функция buz может изменять значение параметра, что в данном контексте невозможно, отсюда ошибка. в функции bar такого не возникает, т.к. параметр константный. поэтому только так:

long val = ptr->GetWidth();
buz(val);
Re: как int const преобразовать в LONG?
От: Блудов Павел Россия  
Дата: 24.09.04 01:04
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>как int const преобразовать в LONG можно ли это сделать?


А какая ОС (сколькибитная), какой компилятор?
... << RSDN@Home 1.1.4 beta 2 >>
Re[5]: как int const преобразовать в LONG?
От: Кодт Россия  
Дата: 24.09.04 08:35
Оценка:
Здравствуйте, Bork, Вы писали:

B>проблема в том, что параметры передаются по ссылке. следовательно компилятор полагает, что функция buz может изменять значение параметра, что в данном контексте невозможно, отсюда ошибка. в функции bar такого не возникает, т.к. параметр константный. поэтому только так:

B>  long val = ptr->GetWidth();
B>  buz(val);


Или так:
template<class T>
struct lvalue_t
{
  mutable T var;
  lvalue_t(const T& value) : var(value) {}
  operator T& () const { return var; }
};

template<class T>
lvalue_t<T> lvalue(const T& value) { return lvalue_t<T>(value); }

.....
buz(lvalue<long>(ptr->GetWidth()));
.....
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.