错误:数组大小表达式必须具有整数或无范围的枚举类型,而不是“double”

时间:2017-11-30 14:53:39

标签: c++ matrix allocation

我正在大学的一个项目中工作,我们必须用抛物线差分报价解决问题。

我们写了一些代码并得到了这个错误:

  

数组大小表达式必须具有整数或未范围的枚举类型,而不是“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;

}

1 个答案:

答案 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];
    }
}