首页 > 解决方案 > c++中二维数组的声明冲突?

问题描述

我遇到了一个需要动态声明二维数组的问题。行数是已知的(即 2),而列数将作为输入。

我使用了这种技术:

cin>>size;
int **outer = new int*[2];
int outer[0] = new int[size];
int outer [1] = new int[size];

但这给出了一个错误:冲突声明'int external [0]'

比我通过将代码更改为来解决问题:

cin>>size;       // size of the column
int **outer = new int*[2];
for(int i=0;i<2;i++)
       outer[i] = new int[size];

所以,我想知道为什么我不能像第一个那样声明二维数组,因为我在声明并定义了大小之后才声明它。

标签: arraysc++11dynamic

解决方案


int outer[0] = ...;

您将一个名为 的全新变量定义outer为一个零元素数组。

简单的分配似乎是你想要的:

outer[0] = new int[size];
outer[1] = new int[size];

而且我真的建议您不要使用自己的手动内存和指针处理。第一个解决方法是意识到它outer不需要是指针而是数组,如

int* outer[2] = {
    new int[size],
    new int[size]
};

然后完全消除指针使用std::vector你可以做到这一点

std::vector<int> outer[2] = {
    std::vector<int>(size),
    std::vector<int>(size)
};

您还应该考虑将 C 样式数组替换为std::array

std::array<std::vector<int>, 2> outer = {
    std::vector<int>(size),
    std::vector<int>(size)
};

推荐阅读