преобразование 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 шт):
На первый взгляд кажется, что 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)