具有自动转换问题的模板类的容器

时间:2011-01-21 08:56:55

标签: c++ templates compiler-errors

我有以下代码:

#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它将编译。任何人都可以暗示为什么会这样吗?

代码是较大项目的简化版本,因此遗憾的是这三种解决方案对我来说都不是。

1 个答案:

答案 0 :(得分:1)

这似乎是vc ++中的一个小故障。如果我在字符串

 x = x* (*&v[0]); 
之前添加字符串

x = x*v[0];
(产生错误),则错误消失(我使用vc 2010 express)。 GCC编译此代码没有错误,但只有在将类重命名为其他内容之后(否则它会抱怨此名称的含糊不清,我不知道为什么,也许它也出现在某些gcc头文件中)