2013-11-27 51 views
0

我已經設法重載賦值運算符,所以我對此有一個解決方法,但很高興知道爲什麼我無法使它工作。2d數組的複製構造函數C++

我arr2d類的開頭是這樣的:

template <class type> class arr2d { 

private: 
    type* m_ptr; 
    int m_nx,m_ny; 

public: 
    arr2d(){ 
      m_ptr = 0; 
      m_nx = 0; 
      m_ny = 0; 
    } 
    // Default constructor creates a null array 

    arr2d(int nx, int ny):m_nx(nx),m_ny(ny){ 
      m_ptr = new type [nx*ny]; 
      if (m_ptr==0){cout << "\nError allocating heap memory.\n";} 
    } 

//  // Copy constructor 
//  arr2d(const arr2d& rhs){ 
//    m_ptr = new type [m_nx*m_ny]; 
//    for(int j=0;j<m_ny;j++){ 
//    for(int i=0;i<m_nx;i++){ 
//      m_ptr[j*m_nx+i] = rhs.m_ptr[j*m_nx+i]; 
//    } 
//    } 
//  } 

等,

你可以看到我試圖拷貝構造函數註釋掉那裏。

現在在我的主,我想使用實例調用拷貝構造函數:

arr2d b=a; 

,其中B陣列目前擁有相同的價值觀作爲。我做錯了什麼?

+0

也許不相關的問題,但它始終是更好地遵循大3.http的規則://en.wikipedia.org/wiki/Rule_of_three_(C++編程_) –

回答

1

您複製構造函數不分配數組大小。它應該像

arr2d(const arr2d& rhs) : m_nx(rhs.m_nx), m_ny(rhs.m_ny) { 
    ... 
} 
0

除了初始化m_nxm_ny爲6502說,你還是宣佈b當需要的模板參數。例如。

arr2d<int> b = a;