先看代码
#pragma once
#include <iostream>
using namespace std;
template<class T>
class Vector {
int size;
T* list;
public:
Vector(int size = 50)
{
//static_assert(size >= 0);
this->size = size;
list = new T[size];
}
~Vector() {
delete[]list;
}
T& operator [](int n) {
//static_assert(n >= 0 && n < size);
return list[n];
}
Vector(const Vector& v) {
assert(*this != v);
size = v.size;
list = new T[size];
for (int i = 0; i < size; i++) {
*(this + i) = v[i];
}
}
friend istream& operator >> (istream& is, Vector<T>& v);
};
template<class T>
istream &operator >> (istream& is, Vector<T>& v) {
for (int i = 0; i < v.size; i++) {
is >> v[i];
}
return is;
}
template<class T>
ostream& operator <<(ostream& os, T& v) {
return os << v;
}
结果编译报错
显示如下
解决方法(1):
在class里边友元函数前面加template声明
解决方法(2):
将友元函数写在class里面