我有一个看起来大致像这样的模板基类
矢量.cc:
template<typename T, unsigned int D>
class Vector {
private:
T _data[D];
...
public:
Vector(Vector<T, D>&&);
...
public:
Vector<T, D>& operator=(Vector<T, D>&&);;
};
extern template class Vector<int, 2>;
extern template class Vector<int, 3>;
extern template class Vector<int, 4>;
矢量.h
// include guard
#include "Vector.h"
template<typename T, unsigned int D>
Vector<T, D>::Vector(Vector<T, D>&&) = default;
template<typename T, unsigned int D>
Vector<T, D>& Vector<T, D>::operator=(Vector<T, D>&&) = default;
template class Vector<int, 2>;
template class Vector<int, 3>;
template class Vector<int, 4>;
// include guard
当我编译这个我得到错误error: array used as initializer
和error: invalid array assignment
警告note: synthesized method [...] first required here
。
当我将其= default;
放入.h
文件中的声明时,我没有收到任何错误或警告。
我已经阅读了多个来源,我可以将其= default;
放入定义中,但对我来说它不起作用。
我究竟做错了什么?我错过了什么吗?还是我只是依赖错误的来源?