【发布时间】:2016-04-05 02:25:09
【问题描述】:
当我尝试使用模板编写矩阵转置代码时,出现以下错误。
错误 1 错误 C2248: 'Matrix::elements' : 无法访问在类 'Matrix' 中声明的私有成员
谁能告诉我如何解决这个错误?
//Matrix.h
#include <iostream>
#include <vector>
using namespace std;
template<class T, int m, int n>
class Matrix;
template<class T, int m, int n>
class Matrix
{
vector<vector<T>> elements;
int nrow;
int ncol;
public:
Matrix();
~Matrix();
void print();
Matrix<T, n, m> transpose();
};
template<class T, int m, int n>
Matrix<T, m, n>::Matrix() : nrow(m), ncol(n)
{
for (int i = 0; i < nrow; i++){
vector<T> row(ncol, i);
elements.push_back(row);
}
}
template<class T, int m, int n>
Matrix<T, m, n>::~Matrix(){}
template<class T, int m, int n>
Matrix<T, n, m> Matrix<T, m, n>::transpose(){
Matrix<T, n, m> m;
for (int i = 0; i < nrow; ++i){
for (int j = 0; j < ncol; ++j){
m.elements[j][i] = elements[i][j];
}
}
return m;
}
template<class T, int m, int n>
void Matrix<T, m, n>::print()
{
for (int i = 0; i < nrow; i++){
for (int j = 0; j < ncol; j++)
{
cout << elements[i][j] << " ";
}
cout << endl;
}
}
//main.cpp
#include "Matrix.h"
using namespace std;
int main()
{
Matrix<int, 3, 2> a;
Matrix<int, 3, 2> b;
Matrix<int, 2, 3> c;
c = a.transpose();
c.print();
}
【问题讨论】:
-
您对模板参数和变量都使用了
m。让它们与众不同。