2017-11-30 2 views
-1

저는 대학에서 포물선 미분 인용 문제를 해결해야하는 프로젝트에서 일하고 있습니다. 오류 : 배열 크기 표현식에 '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]; 
    } 
} 

그 오류 메시지가 첫 번째와 세 번째에 나타납니다 :

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

내가 오류를 포함하는 코드의 단지 일부를 게시 할 예정입니다을 행 ...

누가 우리 잘못이 어디에 있는지 알고 있습니까?

전체 코드 :

#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을 두 번 사용 했더라도? 외모가있는 경우 전체 코드를 추가했습니다. –

+0

@ArthurLeon이 솔루션을 사용하면 m과 n을 double로 사용할 수 있지만 C++은 본질적으로 double을 제외하고 int에 캐스트해야합니다. –

+0

그래서 int로 형 변환되었지만 여전히 double을 사용할 수 있습니다. n에 캐스팅 할 때 정확한 m과 n의 정보를 잃지 않습니까? 내 programm이 여전히 잘 작동하는지 모르겠습니다 ... –

관련 문제