gpt4 book ai didi

c++ - 矩阵转置模板

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:54 24 4
gpt4 key购买 nike

当我尝试使用模板编写矩阵转置代码时出现以下错误。

Error 1 error C2248: 'Matrix::elements' : cannot access private member declared in class '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();
}

最佳答案

Matrix<T, n, m>Matrix<T, m, n> m != n 时完全不同的类.这意味着您无法访问 Matrix<T, n, m> 的私有(private)成员在 Matrix<T, m, n> 的成员函数中.

您可以添加好友声明来解决问题:

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();

friend class Matrix<T, n, m>;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
};

关于c++ - 矩阵转置模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36416061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com