在类型转换后,g ++找不到重载函数

时间:2013-10-17 18:01:50

标签: c++ g++ overloading

我有一个重载功能

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中运行?

1 个答案:

答案 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)