数组中从“int”到“int *”的无效转换

时间:2013-08-11 21:30:44

标签: c++ arrays

如何从主程序中设置数组的维度?

我有Class Loza,我想创建对象(设置容量和价格),并创建包含“capacity”整数的字段。但是当我想在场上设置另一个号码时   比如: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[];
};

2 个答案:

答案 0 :(得分:3)

跟进Carl的回答,调整阵列大小是一项非常重要的任务。如果要设置数组的容量,则需要在堆上生成新空间(使用“new”),将旧数组复制到其中,然后删除旧数组。您应该使用vector<int>代替,它会为您处理堆周围空间的移动。

答案 1 :(得分:0)

您的数组被声明为int *的数组,而不是int的数组。你也是错误地创建它。你真正想要的是:

int *aray;

aray = new int[capacity];

除此之外,您的setCapacity方法似乎并未尝试实际更改您正在创建的阵列的容量。那迟早会咬你的。

但真正的C ++人会说“不要使用数组”。有些C ++容器可以满足您的需求。