对模板化类的方法的未定义引用

时间:2014-07-18 17:04:55

标签: c++ templates typename

我正在尝试制作一个通用的2D数组矩阵类,但是我得到了“错误:未定义的引用`Zero :: StaticMatrix :: StaticMatrix(unsigned int,unsigned int)'”for my []重载和构造函数这两个班级。

这是类定义的pastebin。 http://pastebin.com/Yq8fMAdy

P.S。我正在使用朋友帮助程序类,因此我可以使用类似matrix[i][j]的内容访问_internal向量,因为没有[][]重载。

1 个答案:

答案 0 :(得分:1)

这不是模板的前向声明:

class StaticMatrixRow; // forward declaration

这是:

template< class T > class StaticMatrixRow;

StaticMatrixRow中使用之前,您必须声明StaticMatrix::operator[]。声明运算符,然后在StaticMatrixRow的声明/定义之后定义它。

而不是使用返回引用的行迭代器的单个实例,StaticMatrix::operator[]应该创建一个新的行迭代器并返回它。

StaticMatrix::beginStaticMatrix::end都声明为const,因此这些应返回const_iterator类型。

StaticMatrix::erase毫无意义,因为他们会在不更改_internal_rows成员的情况下更改_columns的大小。 StaticMatrix::clear也不会更新这些成员;它应该拨打StaticMatrix::resize( 0, 0 )

StaticMatrixRow::operator[]应使用(*_internal)[position],因为_internal是指针。

由于StaticMatrixRow使用对向量的const引用进行初始化,因此_internal应该是指向const向量的指针。由于向量是常量,StaticMatrixRow::operator[]应返回const T &