我正在尝试制作一个通用的2D数组矩阵类,但是我得到了“错误:未定义的引用`Zero :: StaticMatrix :: StaticMatrix(unsigned int,unsigned int)'”for my []重载和构造函数这两个班级。
这是类定义的pastebin。 http://pastebin.com/Yq8fMAdy
P.S。我正在使用朋友帮助程序类,因此我可以使用类似matrix[i][j]
的内容访问_internal向量,因为没有[][]
重载。
答案 0 :(得分:1)
这不是模板的前向声明:
class StaticMatrixRow; // forward declaration
这是:
template< class T > class StaticMatrixRow;
在StaticMatrixRow
中使用之前,您必须声明StaticMatrix::operator[]
。声明运算符,然后在StaticMatrixRow
的声明/定义之后定义它。
而不是使用返回引用的行迭代器的单个实例,StaticMatrix::operator[]
应该创建一个新的行迭代器并返回它。
StaticMatrix::begin
和StaticMatrix::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 &
。