テンプレートを使用して行列転置のコードを書き込もうとすると、次のエラーが発生します。行列転置テンプレート
エラー1つのエラーC2248:「マトリックス::要素」:プライベートメンバにアクセスすることはできませんクラスで宣言された「マトリックス」
を誰もがこのエラーを修正する方法を私を与えることはできますか?
//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'を使用しています。それらを違うものにする。 –
ありがとう! – SungwonAhn