项目中有一个round
函数位于一个单独的命名空间中:
namespace CMMN
{
inline long round (double x) { return long (x < 0. ? x-0.5 : x+0.5); }
}
某个类在* .h文件中声明,并且它的成员函数在单独的* .cpp文件中定义:
using CMMN::round;
long SOME_CLASS::MemberFunction()
{
return round(sqrt(m_SomeValue));
}
问题是编译器生成错误:
error C2668: 'CMMN::round' : ambiguous call to overloaded function
...\commdef.h(222): could be 'long CMMN::round(double)'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\math.h(1241): or 'long double round(long double) throw()'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\math.h(1125): or 'float round(float) throw()'
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\math.h(516): or 'double round(double)'
while trying to match the argument list '(double)'
round
调用。 提前致谢。
答案 0 :(得分:1)
确实会影响它。编译器告诉你它可以调用4个候选函数,并且它不知道要调用哪个函数。其中一个候选者是CMMN :: round,它表明正在识别使用声明。
您必须消除您打算呼叫的round()
消息。
答案 1 :(得分:0)
using CMMN::round
仅使该符号在所述命名空间内可见;它不会影响绑定首选项。
您似乎还在某处包含了<cmath>
或<math.h>
,这也声明了round
的重载。
您必须在函数定义中使用声明,或者在使用它们的地方完全限定它们的名称。