Проблема создания массива объектов C ++ - PullRequest
0 голосов
/ 04 мая 2010

У меня есть класс, и я хочу создать массив из нескольких экземпляров, в частности класс матрицы:

class Matrix {    
public:
    Matrix(int sizeX, int sizeY);
    Matrix();
    ~Matrix();
    ....//omiting the rest here
private:
    int dx, dy;
    float **p
    void allocArrays() {
        assert(dx>0);
        assert(dy>0);
        p = new float*[dx];
        for (int i = 0; i < dx; i++){
            p[i] = new float[dy]; 
        }
    }
};
Matrix::Matrix(int sizeX=1, int sizeY=1)
: dx(sizeX),dy(sizeY)  {
    allocArrays();
    for (int i = 0; i < dx; i++)    {
        for (int j = 0; j < dy; j++) {
            p[i][j] = 0;
        }
    }
}


Matrix::Matrix(const Matrix& m) : dx(m.dx), dy(m.dy) {
    allocArrays();
    for (int i=0; i<dx; ++i) {
        for (int j=0; j<dy; ++j) {
            p[i][j] = m.p[i][j];
        }
    }
}

Matrix::~Matrix() {
    for (int i = 0; i < dx; i++) {
        delete [] p[i]; 
    }
    delete [] p;
    p = 0;
}

Мой основной код:

int main()
{
    Matrix myArray[2] = { Matrix(6,6)};
    return 0;
}

Когда я компилируюс g ++ я получаю следующую ошибку:

matrixTesting.cc: In function ‘int main()’:
matrixTesting.cc:197: error: call of overloaded ‘Matrix()’ is ambiguous
matrixTesting.cc:11: note: candidates are: Matrix::Matrix()
matrixTesting.cc:44: note:                 Matrix::Matrix(int, int)
matrixTesting.cc:197: warning: unused variable ‘myArray’

Я провел поиск в Google, но не нашел ответа.Предположим, есть проблема с моим конструктором.

Ответы [ 2 ]

6 голосов
/ 04 мая 2010

Ваш конструктор Matrix (int, int) имеет все аргументы по умолчанию, что делает его таким же вызываемым, как конструктор по умолчанию. Вы должны либо избавиться от конструктора по умолчанию, либо сделать так, чтобы требовался хотя бы один из аргументов Matrix (int, int).

0 голосов
/ 04 мая 2010

нужно ; после float **p

...