加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:55:31 所属栏目:百科 来源:网络整理
导读:我有以下代码: #include vectortemplateint Wt = 0class fixed {public: explicit fixed(double val = 0) { operator=(val); } ~fixed(){} operator double() const { return v_; } double operator =(const double d){ if (dWt) v_ = Wt; else v_ = d; ret
我有以下代码:

#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中编译会出现以下错误:

error C2676: binary ‘*’ : ‘fixed’
does not define this operator or a
conversion to a type acceptable to the
predefined operator

如果我取消注释main中的三行中的任何一行(注释额外的向量),它将编译.如果我使用gcc它将编译.任何人都可以暗示为什么会这样吗?

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

解决方法

这似乎是vc中的一个小故障.如果我添加一个字符串

 x = x* (*&v[0]); 

在字符串之前

x = x*v[0];

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读