2013-11-15 95 views
0

我有一个任务来获取用户的命令行参数 - 用户输入两个int来定义动态数组的行和列。然后数组填充随机数。我似乎无法创建数组,因为无论我尝试什么,都会收到无效的转换错误。任何人都可以澄清我在这里的误解吗?int数组无效的转换错误

我抄录如下每行相关的代码和错误消息:

int main(int argc, char* argv[]) { 

/* Cut out code irrelevant to question that gets the arguments 
    to define columns and rows. This part works fine. */ 

    int * array = new int[rows]; 

    int i, j; 
    for (i = 0; i < rows; i++) { 
      array[i] = new int[columns]; // error: invalid conversion from ‘int*’ to ‘int’ 

    } 

    int * pointer = array; 

    array = randomArray(pointer, rows, columns); 

    for (int i = 0; i < rows; i++) { 
      for (int j = 0; j < columns; j++) { 
        cout << array[i][j] + " " << endl; // error: invalid types ‘int[int]’ for array subscript 

      } 
    } 

    return 0; 

} 


int* randomArray(int array[], int rows, int columns) { 

    srand (time(0)); 

    for (i = 0; i < rows; i++) { 
      for (j = 0; j < columns; j++) { 
        int random = rand() % 100; 
        array[i][j] = random; // error: invalid types ‘int[int]’ for array subscript 
      } 
    } 
    return array; 

    for (i = 0; i < rows; i++) { 
      delete[] array[rows]; 
    } 
    delete[] array; // error: type ‘int’ argument given to ‘delete’, expected pointer 
} 

我已经成功地清理你大多数的错误,那么远,但我似乎无法修复这些最后的。我知道我错过了关于2D数组的重要事情。有小费吗?

回答

3

你想array是指针数组来int阵列以

int * array = new int[rows]; 

应该

int ** array = new int*[rows]; 

int* randomArray(int array[], int rows, int columns) 

将成为

int** randomArray(int *array[], int rows, int columns) 

,或者如由WhozCraig指出,

void randomArray(int *array[], int rows, int columns) 

由于不需要返回值。

另外,如果不违反您的分配的约束,你可以使用std::vector代替

std::vector<std::vector<int>> array; 
+1

+1注:第一次以这种方式实现的'返回值randomArray'是毫无意义的。如果'randomArray()'实际上*分配了数组并且只将这两个维作为参数,那显然是必需的。 – WhozCraig

+0

@WhozCraig谢谢,我没有检查该函数的实现需要当前签名。我现在在回答中已经注意到了这一点。 – simonc

+0

感谢您的帮助。我仍然有一些问题得到它编译...我需要能够将此数组传递给randomArray函数,但我似乎无法得到它的工作。我创建了int *指针作为传递给函数的虚拟对象,但是一旦我实现了您的建议,现在我在初始化它时出现此错误:无法将参数'1'的'int *'转换为'int **' void randomArray(int **,int,int)'和使用它作为参数时出现此错误:error:无法将参数'1'的'int *'转换为'int **'为'void randomArray(int **, int,int)' – Megan