我试图重载向量的基本算术运算符。这个想法是创建一个计算器,它可以增加,减少和乘以很长的数字(例如长度为4000)。当我添加两个向量时,我希望我的程序从两个向量开始循环,添加值,然后将它们推送到第三个向量。我知道我不应该重载std类,或者我可以使用stl和boost来完成这个任务,但是我的项目不允许这样做。有问题重载“+, - ,*”运算符的向量 - “不匹配的运算符...”
我的主要问题是我的程序似乎无法识别我的重载操作符。这里的一个代码段:
从
//calculator.h
class Calculator {
public:
....
void Solve();
friend std::vector<int> operator+(const std::vector<int> &op1, const std::vector<int> &op2);
friend std::vector<int> operator-(const std::vector<int> &op1, const std::vector<int> &op2);
friend std::vector<int> operator*(const std::vector<int> &op1, const std::vector<int> &op2);
}
和
//calculator.cpp
void Calculator::Solve() {
...
if(operation == '-') {
op1 = op1 - op2;
}
else if(operation == '+') {
op1 = op1 + op2;
}
else if(operation == '*') {
op1 = op1 * op2;
}
...
}
friend std::vector<int> operator+(const std::vector<int> &op1, const std::vector<int> &op2) {
std::vector<int> toreturn;
...
//use a couple loops to add vectors together
...
return toreturn;
}
当我克编译++(-v = 5.4,ubuntu的16.04),I得到以下错误:
error: no match for ‘operator-’ (operand types are ‘std::vector<int>’ and ‘std::vector<int>’)
polynomial1 = polynomial1 - polynomial2;
^
In file included from /usr/include/c++/5/vector:65:0,
from Calculator.h:18:
/usr/include/c++/5/bits/stl_bvector.h:208:3: note: candidate: std::ptrdiff_t std::operator-(const std::_Bit_iterator_base&, const std::_Bit_iterator_base&)
operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
^
/usr/include/c++/5/bits/stl_bvector.h:208:3: note: no known conversion for argument 1 from ‘std::vector<int>’ to ‘const std::_Bit_iterator_base&’
In file included from /usr/include/c++/5/bits/stl_algobase.h:67:0,
from /usr/include/c++/5/vector:60,
from Calculator.h:18
我试图让矢量重载全球范围(他们不适用于计算器类的私人成员),在试图使它们成员函数(使用单个参数rhsObj
和this
),将op1 = op1 + op2设置为std::vector<int> temp = op1 + op2
。到目前为止没有任何工作。我甚至尝试使用基本相同的代码制作公共功能std::vector<int> Add(std::vector<int> op1, std::vector<int> op2)
,但它没有奏效。
任何帮助将不胜感激!
[mcve]。鉴于您发布的代码片段,有人很少有人重建您的问题。 –
@ M.M为什么这样编译:http://coliru.stacked-crooked.com/a/f096610d01605e4c – xinaiz
@BlackMoses我会修改我的答案来掩盖这一点。其实应该有一个重复 –