我创建了一个模板类Number。我超载了< <运算符,但我无法使%运算符工作。如何为模板类重载%运算符?
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无法解析的外部”错误。所以我的问题可以归纳为两个问题: 1.为什么我们需要使用<>,而使用朋友符号重载操作符? 2.为什么它不适用于%操作符?
不错的问题。我没有好的答案,你需要有人谁groks模板远远比我好,但我知道这个问题消失,如果您将函数定义为类:'朋友数操作符%(数量一,数 B) { return number (an%bn); '垃圾回答,所以这是一个评论,但这是我所做的,继续前进。 –
user4581301
没有必要明确写入''类,因为[注入的类名]内(https://stackoverflow.com/questions/25549652/why-is-there-an-injected-class-name)。 –