私はテンプレートクラスNumberを作成しました。 < <演算子がオーバーロードされましたが、%演算子を使用できません。テンプレートクラスに%operatorをオーバーロードするにはどうすればよいですか?
template<typename t>
class Number
{
private:
t n;
public:
Number(t a) :n{ a } {};
Number() :n{ t() } {};
friend ostream & operator<<<>(ostream & os, const Number<t>& a);
friend Number<t> operator%(Number<t> a, Number<t> b);
};
template<typename t>
ostream & operator<<<>(ostream & os, Number<t> a)
{
os << a.n;
return os;
}
template<typename t>
Number<t> operator%(Number<t> a, Number<t> b)
{
return Number<t>(a.n % b.n);
}
あなたはそれのために仕事をしていません< <オペレータの定義、で> <を見ることができるように。しかし、%演算子の定義でこれを使用すると、構文エラーが発生し、もし私がそうでなければ、 "1未解決の外部"エラーが発生します。私の問題は2つの質問でまとめられます。 1.フレンド表記を使用して演算子をオーバーロードすると、なぜ<を使用する必要がありますか? 2.なぜ%演算子で動作しないのですか?
ダーン良い質問です。私は良い答えがありません。あなたはテンプレートよりもはるかに優れている人が必要ですが、関数定義をクラスに移すと問題が解消することが分かります。 'friend number演算子%(数字、数字b) { 戻り番号(%bn); } 'だから、それはコメントですが、それは私がやっていることです。 –
user4581301
[注入されたクラス名](https://stackoverflow.com/questions/25549652/why-is-there-an-injected-class-name)のため、明示的にクラス内に ''を書く必要はありません。 –