0

我正在尝试以+=某种方式为我的模板 Polynom 类重载运算符,这样我就可以同时使用 Polynoms 和常量作为参数。

我在我的类中编写了一个构造函数和以下运算符:

Polynom(const T& num = 0) {
  coefs.push_back(num);
}
friend Polynom& operator += (Polynom& lhs, const Polynom& rhs) {
  ...
}

它工作正常,我可以使用:poly += 1;. 当编译器遇到类似的事情时,它会做什么?它看到没有使用这些参数的 += 运算符:

(Polynom<int>& lhs, const int)

但是有一个用于:

(Polynom<int>& lhs, const Polynom& rhs)

所以,它试图转换const intconst Polynom&? 它为此使用构造函数,对吗?但是为什么在添加常量时这个声明不起作用:

Polynom& operator += (Polynom& rhs) {
  ...
}

编译器说“与运算符 += 不匹配。

4

2 回答 2

3

将 a传递int给采用 a 的函数const Polynom&时,编译器能够从 构造一个临时Polynom对象int,然后将其绑定到const Polynom&参数。但是,参数不会发生这种情况,Polynom&因为临时对象不能绑定到非 const 引用。

于 2012-11-15T20:49:31.130 回答
0

您需要向我们展示演示该问题的模板代码或最小的可编译代码。

尝试创建一个接受整数参数的方法:

friend Polynom& operator+=(const Polynom& lhs, int constant);

我对您的表示法感到困惑,Polynom<int>这表明您的Polynom课程是一个模板。

于 2012-11-15T20:54:02.497 回答