2017-11-30 5 views
-1

私はパラボリックな微分引用の問題を解決しなければならない大学のプロジェクトに取り組んでいます。エラー:配列サイズ式には「double」ではない、整数型または非スコープ型の列挙型が必要です

我々はいくつかのコードを書いて、このエラーを得た:

Array size expression must have integral or unscoped enumeration type, not 'double'

私はエラーが含まれているコードの一部だけ掲載します:エラーメッセージは、第1および第3の時に表示されます

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; 

}次のコードは、あまりにもint型にキャストすることによって、あなたの問題を解決します

+2

nおよびmは –

+2

何種類あるかを投稿してください「n」と「m」ですか?それらは整数でなければなりません。 –

+0

3人のプログラマーにならないでください。 C++のため。 – Ron

答えて

-1

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]; 
    } 
} 
+0

私は既にnとmのためのdeklarationをdoubleとして持っていますか? もしあなたが見ているとすれば、コード全体を追加しました –

+0

@ArthurLeonこの解決策では、mとnをdoubleとして使うことができますが、C++はdoubleを除いて本質的にintにキャストする必要があります。 –

+0

それはintにキャストされますが、私はダブルスチールを使うことができます。 nにキャストするとき、正確なmとnの情報を失うことはありませんか? 私のプログラムがまだうまく動作するかどうかわかりません... –

関連する問題