У меня есть шаблон класса Matrix
, который выглядит следующим образом:
using matrix_size_t = unsigned int;
using matrix_data_t = double;
template <matrix_size_t row, matrix_size_t col>
class Matrix
{
protected:
matrix_data_t m_matrix[row][col];
//more code irrelevant to the question...
}
У меня также есть шаблон подкласса SquareMatrix
, который выглядит так:
template <matrix_size_t size>
class SquareMatrix :public Matrix<size, size>
{
public:
matrix_data_t trace()
{
matrix_data_t trace{ 0 };
for (matrix_size_t j{ 0 }; j < size; ++j)
{
trace += m_matrix[j][j]; //C3861 error in MVS: m_matrix identifier not found
}
return trace;
}
};
Проблема is: Я не могу получить доступ к члену m_matrix
из подкласса.
Когда я заменяю m_matrix
на Matrix<size,size>::m_matrix
, код подкласса работает:
template <matrix_size_t size>
class SquareMatrix :public Matrix<size, size>
{
public:
matrix_data_t trace()
{
matrix_data_t trace{ 0 };
for (matrix_size_t j{ 0 }; j < size; ++j)
{
trace += Matrix<size, size>::m_matrix[j][j]; //this works
}
return trace;
}
};
Я не знаю, правильно ли это делать. Помогите, пожалуйста, разобраться в том, что происходит!