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

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

本文关键字:int 转换 无效 数组      更新时间:2023-10-16

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

我有类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[];
};

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

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

int *aray;

和:

aray = new int[capacity];

除此之外,setCapacity方法似乎并没有试图实际更改正在创建的阵列的容量。这迟早会咬你的。

不过,真正的C++程序员会说"不要使用数组"。已经有一些C++容器可以做您想要做的事情了。