我想重載我的模板Vector類的+ =操作符。重載模板操作符
template<unsigned int dimensions, typename TValue>
class Vector
{
private:
std::array<TValue, dimensions> m_values;
public:
Vector(){
for (int i = 0; i < dimensions; i++){
m_values[i] = TValue();
}
};
Vector(std::array<TValue, dimensions> elements){
for (int i = 0; i < dimensions; i++){
m_values[i] = elements[i];
}
};
inline void set(VectorDimensions dimension, TValue value){
m_values[dimension] = value;
};
inline TValue get(VectorDimensions dimension) const{
return m_values[dimension];
};
inline unsigned int getSize() const{
return dimensions;
};
const std::array<TValue, dimensions> getValues() const{
return m_values;
};
friend ostream& operator<<(ostream& os, const Vector<dimensions, TValue>& vt) {
array<TValue, dimensions> values = vt.getValues();
os << '[';
for (unsigned int i = 0; i < vt.getSize(); i++){
os << values[i] << values[i+1] ? ", " : "";
}
os << ']';
return os;
};
friend Vector<dimensions, TValue>& operator+=(const Vector<dimensions, TValue>& vt) {
array<TValue, dimensions> values = vt.getValues();
for (unsigned int i = 0; i < vt.getSize(); i++){
m_values[i] += values[i];
}
return *this;
};
};
完成投入過載爲+ = opperator我得到很多下列錯誤:
錯誤C2805:二進制 '操作符+ =' 太少參數
錯誤C4430:缺少類型說明符 - 假定爲int。注意:C++不支持default-int
錯誤C2334:在'{'之前的意外標記(s)跳過明顯的功能體。
錯誤C2238:在';'之前的意外標記(s)
語法錯誤:缺少';' '<'
錯誤C2143:語法錯誤:缺少';' '++'之前
錯誤C2143:語法錯誤:在'之前'缺少''''''
錯誤C2059:語法錯誤: '迴歸'
錯誤C2059:語法錯誤: '對'
錯誤C2059:語法錯誤: ')'
的,爲什麼解釋或者這些錯誤如何實際上由我做錯的事情引起的可能是有用的。謝謝
那麼,主要的錯誤是,'+ ='實際上分別作爲運算符'+'和'='。 'a + = b'與'a = a + b'相同,所以你應該實現'operator +',如果需要'operator ='。 –
'operator + ='必須作爲一個參數的成員函數實現,或者一個非成員採用兩個參數。您試圖將其作爲一個非成員來執行一個參數:因此「參數太少」錯誤。把'朋友'放在前面。 –
@ZachP:恰恰相反,我會說(如果我正確理解你的話)。 'operator +'應該用'operator + ='來實現。 –