2011-01-21 3 views
4

Je le code suivant:Conteneur de classe modèle avec problème de conversion automatique

#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]; 
} 

Compiler dans VS 2005 Express et 2010 Express donne l'erreur suivante:

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

Si je décommenter l'un des trois lignes dans le principal (commentant le vecteur supplémentaire), il compilera. Si j'utilise gcc, il va compiler. Quelqu'un peut-il donner un indice pour expliquer pourquoi?

Le code est une version simplifiée d'un plus grand projet donc les trois solutions ne sont malheureusement pas des options pour moi.

Répondre

1

Il semble comme un pépin dans vC++. Si j'ajoute une chaîne

 x = x* (*&v[0]);
AVANT la chaîne
x = x*v[0];
(qui a produit l'erreur) alors l'erreur disparaît (j'utilise vc 2010 express). GCC compile ce code sans erreurs, mais seulement après avoir renommé la classe fixée à autre chose (sinon il se plaint de l'ambiguïté de ce nom, je ne sais pas exactement pourquoi, peut-être apparaît-il aussi dans certains en-têtes gcc)

+0

J'ai essayé était Qt qui utilise gcc, mais devinez qu'il n'a pas les mêmes en-têtes. J'ai signalé le bogue: https://connect.microsoft.com/VisualStudio/feedback/details/637760/container-of-template-class-with-automatic-conversion-problem –

Questions connexes