g++ не может найти перегруженную функцию после typecast
У меня перегружена функция
void FuncGetSomething(string, double&)
void FuncGetSomething(string, int&)
void FuncGetSomething(string, bool&)
.... Это должно работать так
double myDbl = 0;
FuncGetSomething("Somename", myDbl)
//to get the new value for myDbl in side the function, and the new value is preset earlier in the code
Но по какой-то причине я видел, как кто-то написал это
double myDlb = 0;
FuncGetSomething("Somename", (double)myDbl)
и это работает в Visual Studio 2008.
Однако, когда я пытаюсь собрать то же самое в Linux (g++ 4.7.2), он жалуется
error: no matching function for call to GetSomething(const char [8], double) can be found
Кто-нибудь может дать мне несколько идей о том, почему он работает в VS08 и почему он не в Linux? Есть ли способ заставить его работать в Linux?
1 ответ
Актерский состав (double)
означает, что это создает временный объект типа double
, Когда вы вызываете функцию, вы пытаетесь привязать к ней неконстантную ссылку, что недопустимо. Это может помочь:
void f( double& ) {};
double d = 1.2;
f( d ); // allowed (1)
f( 1.2 ); // not allowed (2)
f( (double)d ); // not allowed, basically the same as (2)