2017-02-18 27 views
-2

我正在寫一個簡單的頭文件,它可以製作一個動態二維數組,並在行和列中放入0,打印數組並刪除數組。簡單的二維數組頭文件,打印失敗

在Debug中,當逐步完成時,2d數組被初始化,它將0放在那裏,但是當my_array.Print_Array();稱爲,編譯器跳過它。

當我嘗試從主文件打印數組失敗。任何幫助將不勝感激。

頭文件:

 class twoD_Array 
{ 
    public: 
     int **Array; 
     int *col, *row; 
     int size_col, size_row; 

     twoD_Array(int, int); 
     ~twoD_Array(); 

     void Print_Array(); 

}; 

twoD_Array::twoD_Array(int size_c, int size_r) 
{  
     size_col = size_c; 
     size_row = size_r; 

     Array = new int *[size_col]; 
     for (int i = 0; i < size_col; i++) 
     { 
      Array[i] = new int[size_row]; 

       for (int j = 0; j < size_row; j++) 
        Array[i][j] = 0; 
     } 

} 

void twoD_Array::Print_Array() 
{ 
    for (int y_i = 0; y_i<size_col; y_i++) 
    { 
     for (int x_i = 0; x_i<size_col; x_i++) 
      std::cout << Array[y_i][x_i]; 

     std::cout << std::endl; 
    } 
} 

twoD_Array::~twoD_Array() 
{ 
    for (int i = 0; i < size_row; i++) 
     delete[] Array[i]; 

    delete[] Array; 
} 

主文件:

#include "stdafx.h" 
#include <iostream> 
#include "2D_Array.h" 

int main() 
{ 
    int x, y; 

    std::cout << "how many x variables?" << std::endl; 
    std::cin >> x; 
    std::cout << "how many y variables?" << std::endl; 
    std::cin >> y; 

    twoD_Array my_array(x, y); 
    my_array.Print_Array(); 


    return 0; 
} 
+0

任何不使用'std :: vector '來管理底層數組的原因? – WhiZTiM

+0

你運行一個嵌套for循環,直到size_col代替size_row – pergy

+0

'當我嘗試從主文件打印數組失敗時'你能定義_it失敗_嗎? – Yousaf

回答

3

您使用在構造函數中的局部變量,但你使用的Print_Array方法的成員變量,這是不初始化。您需要在提供它們的構造函數中初始化成員變量size_colsize_row。此外,還有一點需要注意,在Print_Array方法中,您使用size_col而不是size_row作爲x_i循環,這看起來像是邏輯錯誤。 我已經重寫了構造函數和Print_Array看起來是這樣的:

twoD_Array::twoD_Array(int size_col, int size_row) 
{ 
    this->size_col = size_col; 
    this->size_row = size_row; 
    Array = new int *[size_col]; 
    for (int i = 0; i < size_col; i++) 
    { 
     Array[i] = new int[size_row]; 
     for (int j = 0; j < size_row; j++) 
     { 
      Array[i][j] = 0; 
     } 
    } 
} 

void twoD_Array::Print_Array() 
{ 
    for (int y_i = 0; y_i < size_col; y_i++) 
    { 
     for (int x_i = 0; x_i < size_row; x_i++) 
     { 
      std::cout << Array[y_i][x_i]; 
     } 

     std::cout << std::endl; 
    } 
} 
+0

我將size_col更改爲size_row,但它仍然不打印 – BlooB

+0

好吧賈斯汀時間打敗了我。 – alhadhrami

3

twoD_Array::twoD_Array(int size_col, int size_row) 

int size_col定義了一個新的臨時和本地命名size_col構造函數的變量。這size_col與成員變量size_col無關,因爲它們具有相同的名稱本地變量隱藏成員變量。

最終結果是在Print_Array成員變量size_col尚未設置爲任何內容,因此Crom只知道會發生什麼。

解決方案:

設置成員變量:

twoD_Array::twoD_Array(int col, int row): size_col(col), size_row(row) 

冒號(:)告訴一個Member Initializer List即將編譯器。成員初始化程序列表允許您在輸入構造函數的主體之前初始化類成員。當你有一個沒有默認構造函數的成員變量,或者需要昂貴的初始化時,這是非常重要的,你不希望被強制執行兩次。它也允許你初始化一個基類。

請注意,我還更改了參數的名稱以防止未來混淆。

雖然我們在這裏,但我們可以通過詢問What is The Rule of Three?來解決可能是OP的下一個問題。點擊鏈接。節省大量的調試時間。

+0

感謝您的幫助和額外的信息,我保存了鏈接 – BlooB