0

メインプログラムから配列の次元を設定するにはどうすればよいですか?

クラス Loza があり、オブジェクトを作成し (容量と価格を設定)、「容量」整数を含むフィールドを作成します。しかし、次のようなフィールドに別の数値を設定したい場合: aray[i] = 1; コンパイラーは次のように言います:

invalid conversion from `int' to `int*' in array

この問題を解決するにはどうすればよいですか? フィールドのインデックスの要素を別の数値(0/1)に設定したいだけです

class Loza {
public:

    Loza(int capacity, int price) {
        this->capacity = capacity;
        this->price = price;
        *aray = new int[capacity];
        for (int i = 0; i < capacity; i++) {
            aray[i] = 0;
        }
    }
    virtual ~Loza();

    void info();

    bool set(int i) {
        if (aray[i] == 0) {
            aray[i] = 1;
            return true;
        } else {
            return false;
        }
    }

    int getCapacity() const {
        return capacity;
    }

    int getPrice() const {
        return price;
    }

    void setCapacity(int pocetMiest) {
        this->capacity = pocetMiest;
    }

    void setPrice(int cenaMiesta) {
        this->price = cenaMiesta;
    }

private:
    int capacity;
    int price;
    int *aray[];
};
4

2 に答える 2

3

Carl の回答に続いて、配列のサイズを変更することは重要な作業です。配列の容量を設定する場合は、ヒープ上に新しい領域を生成し ('new' を使用)、古い配列をそこにコピーし、古い配列を削除する必要があります。代わりに使用する必要がvector<int>あります。これは、ヒープの周りのスペースのこの動きを処理します。

于 2013-08-11T21:37:04.767 に答える
0

あなたの配列は、の配列でint *はなく、の配列として宣言されていintます。また、間違って作成しています。あなたが本当に欲しいのは:

int *aray;

と:

aray = new int[capacity];

それに加えて、あなたのsetCapacityメソッドは、作成している配列の容量を実際に変更しようとしているようには見えません。それは遅かれ早かれあなたを噛むでしょう。

ただし、実際の C++ の連中は「配列を使用しないでください」と言うでしょう。既に必要なことを実行する C++ コンテナーがあります。

于 2013-08-11T21:33:43.217 に答える