c++ - 在 C++ 头文件中声明重载运算符时遇到问题

标签 c++ class vector struct header

所以我正在编写一个程序,它将对多项式进行一些运算,并且我正在使用一个充满我定义的结构的 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/

相关文章:

c++ - 想在某个未知系统上运行程序

c++ - 带行的列 vector - 带 std::accumulate?

c++ - 使用 vector 返回类型遍历二叉树

c++ - 如何使用 UART 板从 DS​​18B20 读取温度

c++ - CString::GetBuffer() 示例

oop - 帮我命名我的类(class)

php - $settings 数组或配置类来存储项目设置?

PHP 类树,其中父类包含子类的实例

c++ - 如何打印出 vector 的内容?

python - 导入SWIG+python模块报错"undefined symbol"