在我的课上:
#ifndef __MYVECTOR_CLASS__
#define __MYVECTOR_CLASS__
template<class Type>
class MyVector{
....
MyVector& operator=(const MyVector& source); //works
friend MyVector<Type> operator+(MyVector<Type> lhs, const MyVector<Type> &rhs); //doesnt
....
};
template<class Type>
MyVector<Type>& MyVector<Type>::operator=(const MyVector &v){
if (_d != v._d){
_d = v._d;
_deleteArray();
_createArray(_d);
}
_assignValues(v._vector, (v._vector + _d));
return *this;
};
template<class Type>
MyVector<Type> operator+(MyVector<Type> lhs, const MyVector<Type> &rhs){
if (lhs._d == rhs._d){
for (int index = 0; index < lhs._d; index++){
lhs._vector[index] += rhs._vector[index];
}
}
return lhs;
};
#endif // __MYVECTOR_CLASS__
没有包括其他非操作员功能,因为它们都可以正常工作。不知道为什么它不起作用。
在源文件中:
int main(){
MyVector<float> a(10);
MyVector<float> b(10);
a = b; // works alone
a = a + b; //breaks
return 0;
}
和错误:
错误 1 错误 LNK2001:无法解析的外部符号“class MyVector __cdecl operator+(class MyVector,class MyVector)”
错误 2 错误 LNK1120: 1 未解决的外部
编辑:
添加了构造函数。
template<class Type>
MyVector<Type>::MyVector(int size){
_d = size;
_createArray(_d);
_assignValues(0);
}