我想重载我的模板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 + ='来实现。 –