преобразование argument** в const argument**

вызов функции:

 print2DimensionalArr(recoveryPoints, Nd.vNumber, Nd.uNumber);

инициализация массива:

Point** recoveryPoints = new Point * [Nd.vNumber];

Point - класс(трехмерный вектор)

функция:

void print2DimensionalArr (const Point** Arr, int n, int m)
{
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            std::cout << i << ',' << j << '\n' << Arr[i][j];
}

перегруженный оператор:

inline std::ostream& operator<<(std::ostream& out,const Point& p)
{
    return out << p.x << ';' << p.y << ';' << p.z << '\n';
}

Ошибка: error C2664: "void print2DimensionalArr(const Point **,int,int)": невозможно преобразовать аргумент 1 из "Point **" в "const Point **".

Вопрос: какого же черта VS лезет куда не надо и какого черта вообще собрался преобразовывать переменные, которые я передаю в функцию? Ведь модификатор const формальных параметров функции никак не может влиять на передаваемый аргумент, а лишь означает что я не имею права менять этот параметр (в случает передачи по ссылке/указателю).


Ответы (1 шт):

Автор решения: KoVadim

На первый взгляд кажется, что const имеет свойство "расползаться по коду" (обычная проблема), но это не везде работает.

нужно просто добавить чуточку const

void print2DimensionalArr (const Point * const * Arr, int n, int m)

а некоторые (east/west const ) могут сказать, что ещё лучше написать так

void print2DimensionalArr ( Point const * const* Arr, int n, int m)
→ Ссылка