2017-02-12 5 views
0

いくつかの導電転送問題をシミュレートするコードをプログラミングしていますが、メッシュの生成に悩まされています。C++で動作しない外部変数宣言(ヘッダーファイルでクラッシュする)

#include <iostream> 
#include <fstream> 
#include <string> 
#include "library.h" 
using namespace std; 

int main (void){ 
    // Number of divisions 
    int xdivA, xdivB, ydivA, ydivB, ydivAB; 
    xdivA=30; xdivB=30; ydivA=30; ydivB=30; ydivAB=30; 
    int N=xdivA+xdivB; 
    int M=ydivA+ydivB+ydivAB; 
    struct controlvolume celln[N][M]; 
} 

ヘッダファイル:

//GLOBAL VARIABLES 
extern int N; 
extern int M; 

//STRUCTURE TYPES 
    struct prop { 
     double rho, Cp, k; 
    }; 
    struct points { 
     double x, y; 
    }; 
    struct controlvolume { 
     points coord; 
     prop localmaterial; 
    }; 

// FUNCTIONS 
double Mesh(controlvolume celln[N][M], int xdivA, int xdivB, int ydivA, int ydivB, int ydivAB, points initialp[4], prop materials [4]); 

Mesh.cpp

#include <iostream> 
#include "library.h" 
using namespace std; 

double Mesh(controlvolume celln[N][M], int xdivA, int xdivB, int ydivA, int ydivB, int ydivAB, points initialp[4], prop materials[4]){ 
    celln[2][2].coord.x=initialp[3].x; 
    celln[2][2].localmaterial.rho=materials[2].rho; 

} 

使用されるすべての変数私が間違っている変数の宣言を使用することができるので、これは... MAINありますmainpの中でinitialp、materialsなどの宣言が宣言されています。私はスペースを節約するためにここにそれらを含めなかった。

私は取得していますエラーは次のとおりです。

[エラー]バインドされた配列は前に整数定数ではありません「]」トークン

[エラー]配列のバインドが前に整定数ではありません「]」トークン'' トークン

[エラー] Lであるように見える非修飾-ID

'INT' の前に予想される前

[エラー]予想 ')'関数Meshが定義されている場合、ibrary.hファイル...

私はあなたの助けに感謝します! :)

答えて

0

C++では、配列の次元はコンパイル時定数でなければなりません。これは、例えば:

int N=xdivA+xdivB; 

は、いかなる種類の一定ではないので、あなたは一人としてそれを定義する必要があります。同様に

const int N=xdivA+xdivB; 

、あなたのプログラム内の他の変数のために。

0

C++で動的サイズの配列を作成することはできません。 celln[N][M]-NおよびMは、コンパイル時に知る必要があります。 NMを変更して時定数をコンパイルするか、std::vectorのようなものを使用してください。

0

配列のサイズは、コンパイル時に既知の定数でなければなりません。あなたはそのサイズ後に決定された可変サイズの配列を持っているしたい場合は、実行時にサイズを変更することができstd::vectorを、使用することを検討しているそうでない場合

N=xdivA+xdivB; // This declaration should change to 

const int N=xdivA+xdivB; 

エラーが発生します。

関連する問題