C++ 能够同时拥有常量和非常量指针数组

C++ 能够同时拥有常量和非常量指针数组,c++,constants,C++,Constants,我正试图用下面的代码解决一个电磁模拟问题。我的节点类有一个成员函数,它接受问题数组,并基于相邻节点进行计算 我们有一些约束,为了实现它们,我将这些节点创建为常量。例如,x+和y+边保持在100 然后,由于类声明中的以下函数定义,当要求const节点计算新值时,它什么也不做: void iteration( Node* array); void iteration( const Node* array) const; problem[i][j] = new Node(i, j, 100); 代

我正试图用下面的代码解决一个电磁模拟问题。我的节点类有一个成员函数,它接受问题数组,并基于相邻节点进行计算

我们有一些约束,为了实现它们,我将这些节点创建为常量。例如,x+和y+边保持在100

然后,由于类声明中的以下函数定义,当要求const节点计算新值时,它什么也不做:

void iteration( Node* array);
void iteration( const Node* array) const;
problem[i][j] = new Node(i, j, 100);
代码的其余部分如下所示:

#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;
}

很明显,因为我不能使常量节点变为非常量。

您应该从新节点声明中删除
const

void iteration( Node* array);
void iteration( const Node* array) const;
problem[i][j] = new Node(i, j, 100);
或者将节点数组声明为

const Node* problem[max_x][max_y];
一般来说,
const
(以及指向它们的指针)可能会被编译器区别对待,因此不鼓励将它们混合在一起(您可以使用不安全的const cast强制执行,但不推荐这样做)