2012-05-31 3 views
0

Вот простая ошибка компиляции, я выделение двойных массивов так:Нужно ли мне динамически выделять двойные массивы, чтобы передать их?

double mixmu[][1] = {{1},{-1}}; 
double mixvar[][1] = {{1},{1}}; 
double coef[]  = {1,1}; 

я не могу передать их как двойные ** объектов?

error: no matching function for call to ‘MixtureModel::MixtureModel(int, int, double [2], double [2][1], double [2][1], Distribution*)’ 
./problems/MixtureModel.h:25: note: candidates are: MixtureModel::MixtureModel(int, int, double*, double**, double**, Distribution*) 
+0

Вы будете иметь гораздо лучшее время с векторами, но сделай сам приветствуйте и читайте, как это работает. – chris

+11

Массив не является указателем. * Массив не является указателем *. ** Массив НЕ является указателем **. –

+0

Вы можете использовать явное приведение в double **, но я не уверен, что это хорошая идея. – nhahtdh

ответ

2

мне нужно динамически выделять двойные массивы для передачи их?

Нет, вы этого не сделаете!
Вашего заблуждение/сомнение вытекает из (неверного) того факта, что массивы указатели

Нет! Массивы не являются указателями!
Имя массива когда-то распадается на указатель на его первый элемент в сценариях, где имя массива недопустимо.

Двухмерный массив не распадается на двойной указатель. Он распадается на указатель на массив.

Ваше заявление должно быть:

MixtureModel::MixtureModel(int, int, double [2], double [2][1], double [2][1], Distribution*); 

или

MixtureModel::MixtureModel(int, int, double *, double(*)[1], double (*)[1], Distribution*); 

Хорошо читать:
How do I use arrays in C++?

Смежные вопросы