[英]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
LU_Solver
值作為參數。 這與const double (&raw_Mat)[N][M]
非常不同。 您需要確保聲明和定義中的參數都匹配:
template<size_t N,size_t M>
class Solver{
public:
Solver();
void LU_Solver(const double (&)[N][M]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.