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中编译会出现以下错误:
如果我取消注释main中的三行中的任何一行(注释额外的向量),它将编译.如果我使用gcc它将编译.任何人都可以暗示为什么会这样吗? 代码是较大项目的简化版本,因此遗憾的是,这三个解决方案对我来说都不是选项. 解决方法
这似乎是vc中的一个小故障.如果我添加一个字符串
x = x* (*&v[0]); 在字符串之前 x = x*v[0]; ?(产生错误)然后错误消失(我使用vc 2010 express). GCC编译此代码没有错误,但只有在将类重命名为其他内容之后(否则它会抱怨这个名称的含糊不清,我不知道为什么,也许它也出现在一些gcc头文件中) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |