2

オーバーロードされた関数があります

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でも動作させる方法はありますか?

4

1 に答える 1

5

へのキャスト(double)は、タイプ の一時オブジェクトを作成していることを意味しますdouble。関数を呼び出すときに、const 以外の参照をバインドしようとしていますが、これは許可されていません。これは役立つかもしれません:

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)
于 2013-10-17T18:05:48.210 に答える