在 c++ 中使用模板传递数组时出现问题

Problem on passing array with template in c++

本文关键字:数组 问题 c++      更新时间:2023-10-16

我是 c++ 中使用模板的新手,但最近有一个问题困扰着我。我正在为 CFD 编写一个简单的 LU 求解器,理想情况下可以传递 2 维或多维数组。但是编译器注意到我发生了一个出线的定义。 下面是求解器头文件:

template<size_t N,size_t M>
class Solver{
public:
Solver();
void LU_Solver(const double);

它的实现文件:

template<size_t N,size_t M>
Solver<N,M>::Solver(){
};
template<size_t N,size_t M>
void Solver<N,M>::LU_Solver(const double (&raw_Mat)[N][M]){
int row = 0;
int column = 0;
while(row < N && column < N){
double lower_sum = 0;
double upper_sum = 0;
for(size_t k=0; k<row; k++){
lower_sum += Lower_Mat[row][k]*Upper_Mat[k][column];
upper_sum += Lower_Mat[column][k]*Upper_Mat[k][row];
}
Lower_Mat[row][column] = raw_Mat[row][column] - lower_sum;
Upper_Mat[column][row] = (raw_Mat[column][row]- upper_sum)/Lower_Mat[column][column];
if(column < row){
column++;
}
else if(column >= row){
Upper_Mat[column][row] = 1;
column = 0;
row++;
}
}
};

在此处输入图像描述

问题出现在LU_Solver中,我已经谷歌了它,但没有精确的解决方案。我想问我如何解决这个问题,或者有没有另一种方法可以传递不确定大小的数组,欣赏?

声明 (const double( 中的参数列表与定义 (const double (&raw_Mat)[N][M]( 中的参数列表不同,这应该足够明显。

更改一个以匹配另一个。

>声明void LU_Solver(const double);说函数LU_Solver只接受一个double值作为参数。这与const double (&raw_Mat)[N][M]有很大不同。您需要确保声明和定义中的参数都匹配:

template<size_t N,size_t M>
class Solver{
public:
Solver();
void LU_Solver(const double (&)[N][M]);