私は私のヘッダファイルに次のようにしている。C++テンプレート演算子のオーバーロードで自動コンストラクタコール?
template<typename T>
class rational {
private:
T num;
T denom;
T gcd(T x, T y);
public:
rational(T num, T denom);
rational(T wholeNumber);
template<typename U>
friend inline rational<U> operator *(const rational<U> &lhs, const rational<U> &rhs);
}
template<typename T>
rational<T>::rational(T whole) {
this->num = whole;
this->denom = 1;
}
template<typename T>
rational<T> operator *(const rational<T> &lhs, const rational<T> &rhs) {
return rational<T>(lhs.num * rhs.num, lhs.denom * rhs.denom);
}
そして、私のメインの中で次のよう
rational<int> x(6), y(2);
rational<int> product = y * x; // this works
rational<int> product2 = 2 * x; // this doesn't
最初の製品は動作しますが、二番目は私に「エラー与える: 'の不一致を演算子* 'in' 2 * x '"となります。どうして?引数として2だけを取るコンストラクタがあるので、自動的に呼び出されるべきではありませんか?もしそうでなければ、私はこれらの両方の作業をするためにオペレータをどのように過負荷にするでしょうか?
ありがとうございました。
変換が動作しない理由、だけでなく、修正、[この回答](http://stackoverflow.com/a/で説明されています。
正しい方法は持っていることです3888237/160206)。 –
[暗黙の変換が起こっていない]の重複が考えられます(http://stackoverflow.com/questions/3888082/implicit-conversion-not-happening) – wilx