Возможность иметь массив как константных, так и неконстантных указателей
Я пытаюсь решить симуляцию электромагнетизма с помощью приведенного ниже кода. Мой класс Node имеет функцию-член, которая принимает проблемный массив и выполняет вычисления на основе соседних узлов.
У нас есть некоторые ограничения, для их реализации я создаю эти узлы как const. Например, х + и у + край удерживаются на 100.
Затем, когда const Node просят вычислить новое значение, он просто ничего не делает, благодаря приведенным ниже определениям функций в объявлении класса:
void iteration( Node* array);
void iteration( const Node* array) const;
Остальная часть кода показана ниже:
#include "node.h"
int main () {
int max_x = 10;
int max_y = 10;
Node* problem[max_x][max_y];
int i, j;
for (i = 0; i < max_x; i++) {
for (j = 0; j < max_y; j++) {
if ((i == max_x) || (j == max_y)) {
problem[i][j] = new const Node(i, j, 100);
}
}
}
return 0;
}
Я подхожу к этому неправильно? Я получаю ошибку:
assigning Node * from incompatible type const Node *.
Очевидно, потому что я не могу сделать константный узел не константным.
1 ответ
Вы должны либо удалить const
из новой декларации узла:
problem[i][j] = new Node(i, j, 100);
или объявите свой массив Node как
const Node* problem[max_x][max_y];
В общем, const <type>
а также <type>
(и указатели на них) могут трактоваться компилятором по-разному, поэтому смешивать их не рекомендуется (вы можете форсировать их с помощью небезопасного константного приведения, но это не рекомендуется).