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

助けてください...私はかなり迷っているので。

4

1 に答える 1

3

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

代わりに、静的に割り当てられた配列を使用してください。

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

このようにMを作成する必要はなく、31個のExpeオブジェクトが自動的に入力されます。Expeのint配列についても同じことが言えます。

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

動的割り当てを使用する必要がある場合は、次の表記に従う必要があります。

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

ポインタはint*、intの配列を格納する場合にのみ型にする必要があります。

const int配列サイズの宣言にsを使用することもできます。したがって、これは有効です。

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

これを使用して、コード内の「魔法数」を取り除くことができます。

のようなtypedeftypedef Arr* Array;は通常、C ++ではなく、Cで使用されます。このようなtypedefが必要になる状況はほとんどありません。

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

于 2012-04-11T19:28:00.763 に答える