所以我正在编写一个程序,它将对多项式进行一些运算,并且我正在使用一个充满我定义的结构的 vector 来表示多项式。我尝试做的部分工作是重载 +、-、*.+=、-= 和 *= 运算符。
term 是我定义的一个结构体。
我试图在一个类中包含所有重载方法。
我有一个文件可以重载它并且工作正常。该方法定义为:
vector<term> operator+(vector<term> t1, vector<term> t2)
当我尝试将其放入 C++ 头文件中以在类中使用它时,出现此错误:
header 中的方法声明:
vector<term> operator+(vector<term> v1,vector<term> v2);
我得到的错误:
poly.h:25:71: error: ‘std::vector<term> Polynomial::operator+(std::vector<term>, std::vector<term>)’ must take either zero or one argument
vector<term> operator+(const vector<term> v1,const vector<term> v2);
为什么它在一个实例中有效而在另一个实例中无效?
我是 C++ 的新手,如果我遗漏了任何明显的错误,请原谅。
最佳答案
错误是因为 operator+()
是一个类的成员函数,在本例中是 Polynomial
。您可以做的是使 operator+()
成为一个自由函数,在本例中它允许您传递两个参数。
因为您的函数是一个成员函数,这意味着它将采用三个不同的值。其中两个是你传递的,第三个是this
,这是隐式的。
如果你想把它作为一个成员函数,你需要让这个函数只接受一个参数。第二个参数将作为 this
传递。
关于c++ - 在 C++ 头文件中声明重载运算符时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497780/