我試圖重載向量的基本算術運算符。這個想法是創建一個計算器,它可以增加,減少和乘以很長的數字(例如長度爲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我會修改我的答案來掩蓋這一點。其實應該有一個重複 –