Re: Templating classes
MathStuf wrote:
I am working on a class that will be a matrix based on a vector of
vectors. I am having trouble with the following code causing errors on
compilation:
template<class T> class MatrixBase
{
public:
MatrixBase()
{
width = 0;
height = 0;
Those are better initialised.
matrix.clear();
No need to clear a freshly constructed vector.
}
MatrixBase(const unsigned w, const unsigned h, const T &d = T())
{
matrix.resize(w, std::vector<T>(h, d));
width = w;
height = h;
Again, those are better initialised than assigned.
}
void AddRow(const T &d = T())
{
for (std::vector<T>::iterator i = matrix.begin(); i !=
'matrix.begin()' returns 'std::vector<std::vector<T> >::iterator.
You probably want to make this loop nested.
Also, 'std::vector<T>::iterator' is a dependent name. The compiler
doesn't know that it can be used where a type is expected. You need
to tell the compiler to trust you:
for (typename std::vector<T>::iterator ...
^^^^^^^^
matrix.end(); ++i)
i->push_back(d);
If you don't make this loop nested (which is fine), you might want
to review what you're pushing.
++height;
}
// More methods
protected:
std::vector< std::vector<T> > matrix;
unsigned height;
unsigned width;
};
In the AddRow method (and other, similar methods as well), it says
that it needs an ';' before i and that it's undeclared.
That's because it doesn't believe that 'std::vector<T>::iterator' is
in fact a type. Use 'typename' to tell it.
It also says
that 'height' and 'width' are undeclared.
Where?
Should I move the variable
definitions up to the top of the class or should the methods be
outside of it entirely?
Not sure what you're asking here, sorry.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask