我需要为我的类MyVector创建一个复制构造函数。
#include <iostream>
using namespace std;
template<class T>
class MyVector{
private:
T *v;
int size;
int max;
public:
MyVector();
MyVector(const MyVector &l);
MyVector& operator=(const MyVector &lhs);
T &operator[](unsigned int i);
};
int main() {
return 0;
}
template<class T>
MyVector& MyVector<T>::operator = (const MyVector &lhs){
if (this == &lhs) return *this;
for (int i = 0; i < size; ++i){
delete v[i];
}
delete [] v;
max = lhs.max;
size = lhs.size;
v = new T[max];
for(int i = 0; i < size; ++i) {
v[i] = new T(*(lhs.v[i]));
}
return *this;
}
我收到错误:expected constructor, destructor, or type conversion before âmyVectorâ
不确定问题出在哪里,我对c ++还不熟悉。 感谢。
答案 0 :(得分:1)
以下是问题:
template<class T>
MyVector& MyVector<T>::operator = (const MyVector &lhs){
/* ... */
}
返回类型MyVector&
应为MyVector<T>&
,因为您不在类范围内,因此您需要在那里提供模板参数,如下所示:
template<class T>
MyVector<T>& MyVector<T>::operator = (const MyVector &lhs){
/* ... */
}
答案 1 :(得分:1)
在函数实现的返回中,写下MyVector<T>
。
template<class T>
MyVector<T>& MyVector<T>::operator = (const MyVector &lhs)
{
请注意,您正在实现赋值运算符,而不是复制构造函数。
一个不错的选择是使用C ++ 11语法,返回类型跟随函数头:
template<class T>
auto MyVector<T>::operator = (const MyVector &lhs)
-> MyVector&
{
答案 2 :(得分:0)
MyVector(const MyVector &l);
应该是:
MyVector(const MyVector<T> &l);
以及类似地使用MyVector
作为类型的其他地方,因为没有模板参数,类型不完整。