2013-11-15 99 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