我有一个重载功能
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中工作的想法,而且hwy它不在Linux中? 反正有没有让它在Linux中运行?
答案 0 :(得分: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)