Я пишу 2D-матричный шаблон для изучения шаблонов и некоторых функций C++ 11.Перегруженный шаблонный двоичный оператор с шаблоном *
Написал заголовок:
template <class T, unsigned int Rows, unsigned int Columns>
class Matrix2D
{
private:
array<array<T,Columns>, Rows> m_Matrix;
public:
Matrix2D() {}
array<T,Columns>& operator[](unsigned int row) { return m_Matrix[row]; } ;
const array<T,Columns>& operator[](unsigned int row) const { return m_Matrix[row]; } ;
friend Matrix2D operator+ <> (const Matrix2D &lhs, const Matrix2D &rhs);
friend Matrix2D operator* <> (const Matrix2D &lhs, const Matrix2D &rhs);
};
operator+
работает отлично - у меня есть реализация, компилирует, ссылки, и шагнул с помощью отладчика.
Проблема с operator*
, для которого я получаю ошибку компиляции
1>...\matrix2d.h(18): error C2143: syntax error : missing ';' before '<'
1>...\matrix2d.h(19) : see reference to class template instantiation 'Matrix2D<T,Rows,Columns>' being compiled
Там нет строки кода пытается использовать оператор, так что это само определение, которое не так, я просто не понимаю, почему ,
Может ли кто-нибудь помочь?
EDIT: (добавил от комментариев)
template <class T, unsigned int Rows, unsigned int Columns>
Matrix2D<T, Rows, Columns> operator+ (const Matrix2D<T, Rows, Columns> &lhs, const Matrix2D<T, Rows, Columns> &rhs)
{
Matrix2D<T, Rows, Columns> addResult;
for (unsigned int i = 0; i < Rows; i++)
for (unsigned int j = 0; j < Columns; j++)
addResult[i][j] = lhs[i][j] + rhs[i][j];
return addResult;
}
template <class T, unsigned int Rows, unsigned int Columns>
Matrix2D<T, Rows, Columns> operator* (const Matrix2D<T, lRows, lColumns> &lhs, const Matrix2D<T, rRows, rColumns> &rhs)
{
Matrix2D<T, lRows, rColumns> mulResult;
for(unsigned int i = 0; i < lRows; i++)
for(unsigned int j = 0; j < rColumns; j++)
for (unsigned int k = 0; k < lColumns; k++)
mulResult[i][k] += lhs[i][k] * rhs[k][j];
return addResult;
}
Что такое определение '' оператора *? Пожалуйста, добавьте его в вопрос. В вопросе есть только объявление друга. – Tobias
Компиляция не доходит до определения, поэтому я пропустил ее.Вот он, если он имеет значение шаблон <класс T, без знака int Строки, неподписанные int Столбцы> Matrix2D оператор * (const Matrix2D & lhs, const Matrix2D < T, rRows, rColumns> & rhs) { \t Matrix2D mulResult; \t \t для (беззнаковое INT I = 0; г
@UriRaz: вы можете отредактировать свой вопрос, а не добавлять реализацию в комментарий. – Jarod42