在 c++ 中使用模板传递数组时出现问题
Problem on passing array with template in c++
我是 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]);
相关文章:
- 数组C++问题中最大和第二大的数字
- 二维数组问题
- 数组问题:变量周围的堆栈'arr'已损坏
- 无符号字符数组问题
- 数组问题(if (zeds[i].x == zeds[i].x))
- 字符数组问题
- C++中的turbo数组问题
- 输入和输出的2D字符数组问题
- 多维数组问题
- 指针和数组指向数组问题
- 如何随机排列数组问题
- C++ 多维数组问题 - 多次打印条目
- C++ 2D 读入数组问题
- C++读入 2D 数组问题
- 指针和多维数组问题
- C++多项式类,指针数组问题
- 在数组问题(C++)中查找偶数
- 二维std::数组问题
- 向量/数组问题,不能给变量赋索引/不能使用变量作为数组大小(索引)c++
- 指针数组问题