我正在大学的一个项目中工作,我们必须用抛物线差分报价解决问题。
我们写了一些代码并得到了这个错误:
数组大小表达式必须具有整数或未范围的枚举类型,而不是“double”
我将只发布包含错误的代码部分:
double*** matrix = new double**[n];
for (int i=0; i < n; i++) {
matrix[i]=new double*[m];
}
for (int i=0; i < n; i++){
for(int j=0; j < m; j++){
matrix[i][j] = new double[3];
}
}
该错误消息显示在第一行和第三行......
有人知道我们的错在哪里吗?
整个代码:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <cmath>
using namespace std;
double g; // Deklariere Variablen
double v;
double alpha;
double lauflaenge;
double Wandabstand;
double dl;
double Tw;
double Tu;
double v0;
double u0;
void readtxt() // Lese-Funktion
{
ifstream Randbedingungen("Randbedingungen.txt");
string zeile;
getline(Randbedingungen, zeile);
stringstream zeilenpuffer(zeile);
zeilenpuffer >> g >> v >> alpha >> lauflaenge >> Wandabstand >> dl >> Tw >> Tu >> v0 >> u0; // einlesen der Werte
}
// i increase d decrease, Diskretisierung der Impulstransportgleichung
double ITG (double iju, double ijdu, double ijv, double iiju,
double idju, double ijT, double Tu, double v, double g, double dl) {
double T1;
double T2;
double T3;
T1 = iju*(ijdu/dl)-ijv*(iiju/dl);
T2 = v*((idju+iiju)/(dl*dl))+g*((ijT-Tu)/Tu);
T3 = (iju/dl) - (ijv/dl) + (ijv/dl) +((2*v)/(dl*dl));
return (T1+T2)/T3;
}
// jetzt wird ijv berechnet
double KG (double ijv, double ijdu, double iju) {
return ijv + ijdu - iju;
}
// hier wird ijT iteriert
double TTG (double iju, double ijdT, double ijv, double iijT, double idjT,
double a, double dl){
double T1;
double T2;
double T3;
T1 = iju*(ijdT/dl) + ijv*(iijT/dl);
T2 = a* ((idjT+iijT)/(dl*dl));
T3 = (iju/dl)-(ijv/dl)+((2*a)/(dl*dl));
return (T1+T2)/T3;
}
int main()
{
readtxt();
int z=1;
while (z!=0){
cin >> z;
// Gitter festlegen
// m Punkte in x Richtung
// n Punkte in y Richtung
// Betrachte Gitterlänge dl
int i,j;
double dl;
double m,n;
double Tu;
cout << "Temperatur der Umgebung in K "; cin >> Tu;
cout << "dl in Mikrometern: "; cin >> dl;
m = (1000000/dl)+1; //m ist 1001 für dl=1mm
n = (50000/dl)+1; //n ist analog 51
// Allokiere Quader ( ixjx3 ) wobei im Gitterpunkt i, j also u1, u2, und T
gespeichert werden
//j entspricht der x-Achse und i der y-Achse
double*** matrix = new double**[n];
for (int i=0; i < n; i++) {
matrix[i]=new double*[m];
}
for (int i=0; i < n; i++){
for(int j=0; j < m; j++){
matrix[i][j] = new double[3];
}}
for (int i=1; i < n; i++){
for(int j=0; j < m; j++){
matrix[i][j][0] = 0; //u1
matrix[i][j][1] = 0; //u2
matrix[i][j][2] = 300; //T
}}
//++++++++++++++++++++++++++++Randbedingungen++++++++++++++++++++++++++++
//Ordne der Wand die Temperatur von T=353K zu und u1=u2=0 --> also für
alle i=0
for (int j=0; j < m; j++) {
matrix[0][j][0] = 0; //u1
matrix[0][j][1] = 0; //u2
matrix[0][j][2] = 353; //T
}
// Nun wird simuliert
for(int j = 1; j<m; j++) {
for(int c = 0; c<100; c++){
for(int i = 1; i < n-1; i++) {
//Berechnet u an der Stelle i j
matrix[i][j][0] = ITG(matrix[i][j][0], matrix[i][j-1][0], matrix[i][j][1], matrix[i+1][j][0], matrix[i-1][j][0], matrix[i][j][2], Tu, v, g, dl);
//Berechnet v an der Stelle i j
matrix[i+1][j][1] = KG(matrix[i][j][1], matrix[i][j-1][0], matrix[i][j][0]);
//Berechnet T an der Stelle i j
matrix[i][j][2] = TTG(matrix[i][j][0], matrix[i][j-1][0], matrix[i][j][1], matrix[i+1][j][2], matrix[i-1][j][2], alpha, dl);
}}}
// Ausgabe der Werte
for(i = 0; i < n ; i++){
for(j = 0; j < m ; j++){
cout << "Feld[" << i << "][" << j << "][0]= " << matrix[i][j][0] << endl;
}}
}
return 0;
}
答案 0 :(得分:-1)
以下代码将通过将其转换为int来解决您的问题:
double*** matrix = new double**[(int)n];
for (int i=0; i < n; i++) {
matrix[i]=new double*[(int)m];
}
for (int i=0; i < n; i++){
for(int j=0; j < m; j++){
matrix[i][j] = new double[3];
}
}