0

C++に頭を悩ませようとしています。複雑にすることなくアイデアを説明するのに役立つ小さな断片を提供します。ところで、私はこれらのメソッドを実装するだけで、セットアップやパラメータを変更することはできません。

stocksと呼ばれるオブジェクトを保持する動的配列データ構造のクラスがあります。

typedef class Stock ArrayType;

class DynamicArray {
    ArrayType** items;
    int numberOfElements;
    ...
}

これがそのコンストラクターです。配列を割り当てて1つの項目を追加してから、要素の数を設定することになっています。

DynamicArray::DynamicArray(ArrayType* const item){
    Stock *items = NULL; // ... i guess? pointers to pointers confuse me
    // now im guessing i need to create a actual stock array and point the above pointer to it
    items = new Stock[1]; // ERROR: incomplete type is not allowed? I've tried several things, and cant get rid of the red squiggles
    this->numberOfElements = 1;
}
4

1 に答える 1

1

さて、いくつかの問題があります。すぐに、最初にストックを含める必要があります。私の推測ではメモリ割り当てのため、コンパイラStockはコンパイルする前にの完全な定義を必要とします。DynamicArray

次に、items member-valueに、コンストラクターで作成された配列への参照を含める必要があります。したがって、コンストラクターで定義する代わりに、ステートメントの値を直接;Stock *items[1]に割り当てます。作業中の関数で同じ名前の変数を定義しない限り、省略できます。newthis->itemsthis->

最後に、ポインタの配列を割り当てているので、次の構文を使用します。new ArrayType*[1]

さらに、コーディングの実践のポイントと同じように、typedefの使用と元の型を同じソースで混在させないでください。ですから、ArrayType全体を通して使用するか、まったく使用しないことをお勧めします。

于 2013-02-04T02:03:28.257 に答える