2012-04-11 16 views
0

私はプログラムを作成していて、オブジェクトの配列を作る必要があります。具体的には、各位置がオブジェクトである31x1配列を持っています(各オブジェクトは基本的に6 int )。ここに私が持っているものがありますが、何かが間違っています。クラスと構造体を含むコンストラクタ/デストラクタ

31X1構造体のヘッダ」

const int days=31; 

struct Arr{ 

    int days; 
    int *M; 
}; 
typedef Arr* Array; 

31X1行列コンストラクタ:

void constr(){ 
    int *M; 
    M = new Expe[31]; // Expe is the class 

クラスヘッダ:

class Expe { 
private: 
    //0-HouseKeeping, 1-Food, 2-Transport, 3-Clothing, 4-TelNet, 5-others 
    int *obj; 
} 

クラスオブジェクトコンストラクタ:

Expe::Expe() { 
    this->obj=new int[6]; 
} 

助けてください...私はかなり失われているので。

+3

「何かが間違っています」はあまり説明的ではありません。詳細情報を提供できますか?テストしている完全な短いプログラム、何が起こると予想されるのか、実際には何が起こるのでしょうか? – DCoder

+0

31x1アレイですか?本気ですか? –

+0

teh way私はそれを構築することができますそれはすべての読み込まれているiswnt ...そして1次元のarayと私はvector.hを使用することができます...それは私の宿題です..と私はobjcet指向objcet指向に変更する必要があります –

答えて

3

あなたがする必要がない限り、newを使用しないでください。後で手動で削除する必要があるメモリを動的に割り当てています。

代わりに、静的に割り当てられた配列を使用する:

struct Arr{ 
    int days; 
    Expe M[31]; 
} 

あなたはMを構築する必要はありません。この方法は、それが自動的に31個のEXPEオブジェクトで満たされています。 Expeのint配列と同じです。

(ヒント:構造体とクラスはほとんど同じです彼らの唯一の違い構造体のデフォルトの視認性が公開されているということであるそれとは別に、構造体は、メンバ関数やクラスが行うだけのようなコンストラクタを持つことができます。。。)

をお持ちの場合動的割り当てを使用するために、あなたはこの表記に従ってください:あなたはそれでintの配列を格納する場合

X* variableName = new X[size]; 
... 
delete[] variableName; //Be sure to get rid of unused memory afterwards. 

ポインタのみのタイプint*でなければなりません。

配列サイズの宣言にはconst intを使用することもできます。これは有効です:

const int size = 5; 
int X[size]; 

これを使用して、コード内の「マジックナンバー」を取り除くことができます。

typedef Arr* Array;のようなtypedefはC言語では一般的に使用されていますが、C++では使用されません。このような型をtypedefする必要がある状況はほとんどありません。

コード全体を投稿すると、より良いヘルプが提供される場合があります。あなたのコードには1つか2つのエラーだけでなく、基本的な理解もいくつかあるようです。

+0

ありがとうが、私は力学的方法を使用しなければならない...と私はそれがまだ本当に良い得ていないと言うことがあります。私はそれを修正するために管理する場合、私はコードを投稿するよ、大丈夫私は見てみましょう –

関連する問題