Возможность иметь массив как константных, так и неконстантных указателей

Я пытаюсь решить симуляцию электромагнетизма с помощью приведенного ниже кода. Мой класс 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> (и указатели на них) могут трактоваться компилятором по-разному, поэтому смешивать их не рекомендуется (вы можете форсировать их с помощью небезопасного константного приведения, но это не рекомендуется).

Другие вопросы по тегам