Правильно, что double **
не может быть неявно преобразован в const double **
. Однако он может быть преобразован в const double * const *
.
Представьте себе этот сценарий:
const double cd = 7.0;
double d = 4.0;
double *pd = &d;
double **ppd = &pd;
const double **ppCd = ppd; //this is illegal, but if it were possible:
*ppCd = &cd; //now *ppCd, which is also *ppd, which is pd, points to cd
*pd = 3.14; // pd now points to cd and thus modifies a const value!
Итак, если ваша функция не намерена изменять какой-либо из указателей, измените это взять const double * const *
. Если он намеревается внести изменения, вы должны решить, являются ли все его модификации безопасными, и, таким образом, const_cast
можно использовать, или вам действительно нужно пройти в const double **
.