我有以下代码:
#include <vector>
template<int Wt = 0>
class fixed {
public:
explicit fixed(double val = 0) {
operator=(val);
}
~fixed(){}
operator double() const {
return v_;
}
double operator =(const double &d){
if (d>Wt)
v_ = Wt;
else
v_ = d;
return v_;
}
private:
double v_;
};
int main(){
fixed<5> x;
std::vector<fixed<6> > v(5);
//std::vector<fixed<6> > v(5,0);
//fixed<6> y;
//v[0] = 0;
x = x*v[0];
}
在VS 2005 express和2010 express中编译会出现以下错误:
错误C2676:二进制'*':'固定' 不定义此运算符或 转换为可接受的类型 预定义运算符
如果我取消注释main中的三行中的任何一行(注释额外的向量),它将编译。如果我使用gcc它将编译。任何人都可以暗示为什么会这样吗?
代码是较大项目的简化版本,因此遗憾的是这三种解决方案对我来说都不是。
答案 0 :(得分:1)
这似乎是vc ++中的一个小故障。如果我在字符串
x = x* (*&v[0]);之前添加字符串
x = x*v[0];(产生错误),则错误消失(我使用vc 2010 express)。 GCC编译此代码没有错误,但只有在将类重命名为其他内容之后(否则它会抱怨此名称的含糊不清,我不知道为什么,也许它也出现在某些gcc头文件中)