在我的课上:
#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:无法解析的外部符号“类
MyVector __cdecl operator +(类MyVector,类
MyVector)”
错误2错误LNK1120:1个未解决的外部
编辑:
添加了构造函数。
template<class Type>
MyVector<Type>::MyVector(int size){
_d = size;
_createArray(_d);
_assignValues(0);
}
最佳答案
如果尝试使用coliru进行编译,则会收到以下警告:
main.cpp:15:82:警告:朋友声明'MyVector
运算符+(MyVector,const MyVector&)'声明一个
非模板功能[-Wnon-template-friend]
朋友MyVector运算符+(MyVector lhs,const MyVector&rhs); //不
这应该作为正在发生的事情的线索。将您的代码更改为:
template<typename T>
friend MyVector<T> operator+(MyVector<T> lhs, const MyVector<T> &rhs);
还有it will build。
朋友功能本身是一个模板,其模板参数与
class MyVector
分开。更新:尽管以上内容似乎确实有效,但在阅读this question和this one之后,我想知道这是否更正确:
// forward-declare class MyVector
template<class Type>
class MyVector;
// forward-declare operator+()
template<class Type>
MyVector<Type> operator+(MyVector<Type> lhs, const MyVector<Type> &rhs);
template<class Type>
class MyVector{
// declare that the already-declared operator+<>() is a friend
friend MyVector<Type> operator+<>(MyVector<Type> lhs, const MyVector<Type> &rhs);
};
关于c++ - 模板类运算符“ Unresolved external 条件”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26919082/