函数重载没有最佳匹配问题 谢谢大家帮忙

我列出了几行关键的程序代码,程序在VC++6.0编译会出现这个问题,但是在visual studio 2010就不会有问题,不知道为什么?
cdouble tempRC, tempC, tempKineticC;
tempRC = tempR * exp(II * alpha/1000.);
for(int mR = 0; mR < nBasisRto; mR++)
{
for(int nBR = 0; nBR < nBandR; nBR++)
{
int nR = math.MOP.BandIB2NormalIJ(mR,nBR,nBandR);
if(nR < 0)
continue;

double basis = tempW * BasisR[mR + 1] * BasisR[nR + 1];

// overlap part 重叠积分
// Br*Br
OverlapR(mR,nBR) += basis;

//============= 1/2*Br'*Br' R动能
tempC = 0.5 * tempW * DeriveR[mR + 1] * DeriveR[nR + 1] * exp(-II * 2.0 * alpha/1000.);//II-1

// Coulomb potential
KineticCoulombR(mR,nBR) += tempC - 1.0 / tempRC * basis;

//============== 1/(2*r^2)*Br*Br 角动量

AngularR(mR,nBR) += 1.0 / SQR(tempRC) * basis;//如果你用友元的形式重载运算符的时候就要注意了 在VC++ 编译器(没有打sp6补丁)是必须有提前声明才行的

//
// tempC = -1.0*(1-exp(-POW(tempR/r0,3.0)))/ SQR(tempR) * BasisR[mR + nBasisR_from] * BasisR[nR + nBasisR_from];
// AngularRF(mR,nBR) += tempW * tempC;
//============== 1/8*B^2*(r^2-x^2): r^2*Br*Br
DiamagneticR(mR,nBR) += SQR(tempRC) * basis;

//============== F*x: F*r*cos(theta): r*Br*Br
ElectricR(mR,nBR) += tempRC * basis;

//dipole vs. electron: d*cos(theta)/R^2;
// ElectricRR(mR,nBR) += -polarizability * (1 - exp(-POW(tempR / r0, 6.0))) * SQR(tempR) / POW(SQR(tempR) + SQR(r0),2.0) * basis;
//ElectricRR(mR,nBR) += -polarizability * 1.0 / POW(tempR,4.0) * basis;
}
}
}
上面SQR函数是我一个constant.h头文件中定义的
typedef complex<int> cint;
typedef complex<float> cfloat;
typedef complex<double> cdouble;

//
const cdouble II(complex < double > (0, 1));
const cdouble IR(complex < double > (1, 0));

template<class T> T SQR(const T a)
{
return (a==0)?0:a * a;
}

template<class T> complex<T>
SQR (const complex<T> a)
{
return (a == CZERO) ? CZERO : a * a;
}



F:\桌面的东西\刘红平老师给的资料\linux.cpp(413) : error C2667: 'SQR' : none of 2 overload have a best conversion
F:\桌面的东西\刘红平老师给的资料\linux.cpp(413) : error C2668: 'SQR' : ambiguous call to overloaded function
F:\桌面的东西\刘红平老师给的资料\linux.cpp(419) : error C2667: 'SQR' : none of 2 overload have a best conversion
F:\桌面的东西\刘红平老师给的资料\linux.cpp(419) : error C2668: 'SQR' : ambiguous call to overloaded function
执行 cl.exe 时出错.
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
关键是我看不出来有哪里二义性呢?如果真的有二义性的话,为什么在visual studio 2010中又能编译通过呢
  • 打赏
  • 举报
回复
那怎么解决呢?朋友
ztenv 版主 2014-04-22
  • 打赏
  • 举报
回复
珍惜生命,远离VC6吧; 这是重载的二义性导致的。

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧