2013-11-27 3 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; 

Если массив б теперь имеет то же значение, как. Что я делаю неправильно?

+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_nx и m_ny в 6502 сказал, вы по-прежнему нужен аргумент шаблона при объявлении б. Например.

arr2d<int> b = a; 
Смежные вопросы