2011-01-21 143 views
4

我有以下代碼:集裝箱

#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年快遞和2010年快遞提供了以下錯誤:

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

如果我取消任何主要三行(註釋額外的向量),它會編譯。如果我使用gcc,它會編譯。任何人都可以給出一個暗示爲什麼這是什麼?

該代碼是一個大型項目的簡化版本,所以這三種解決方案不幸都不適合我。

回答

1

它似乎是vC++中的一個小故障。如果我在字符串

x = x*v[0];
(產生錯誤)之前添加一個字符串
 x = x* (*&v[0]);
,那麼錯誤消失(我使用vc 2010 express)。海灣合作委員會編譯此代碼沒有錯誤,但只有在重命名類固定到別的東西(否則它抱怨這個名字不明確,我不知道爲什麼,也許它也出現在一些海灣合作委員會標題)

+0

環境我試過的是使用gcc的Qt,但是猜測它沒有相同的頭文件。我已經報告了該錯誤: https://connect.microsoft.com/VisualStudio/feedback/details/637760/container-of-template-class-with-automatic-conversion-problem – 2011-01-24 07:49:19