
「指すアドレスは変更できないが、要素は変更できる配列」を宣言したいです。
現状以下のコードでエラーが出ています。
c++
1//A.hpp 2class A{ 3public: 4 static const int n = 128; 5 int const arr[n] = {0}; //1) 6 int const arr[n]; //2) 7 void func(); 8 }; 9 10//A.cpp 11void A::func() 12{ 13 arr[0] = 1234; 14 }
1)の場合error: assignment of read-only location
2)の場合error: uninitialized const member in 'const int [128]'
というエラーがでます。
「指すアドレスは変更できないが、要素は変更できるポインター」を宣言する方法についての情報は見つかるのですが、配列の場合はどうすればよいでしょうか?

const外せばいいだけでは?

例)
#include <iostream>
using namespace std;
class A{
public:
static const int n = 128;
//int const arr[n] = {0};
//int const arr[n];
int arr[n] = {0};
int* const arr_p = &arr[0];
void func();
};
void A::func() {
arr[0] = 1234;
// arr = nullptr; // <- error: incompatible types in assignment of ‘std::nullptr_t’ to ‘int [128]’
arr_p[0] = 4321;
// arr_p = nullptr; // <- error: assignment of read-only member ‘A::arr_p’
}
int main() {
A a;
a.func();
cout << a.arr[0] << endl;
return 0;
}
> 「指すアドレスは変更できないが、要素は変更できる配列」
意味不明なので,
・「指すアドレス」を変更しようとする記述
・「要素」を変更しようとする記述
をコードの形で示すとか,主語等を省略せずに明確に記述するなどの工夫が要るものと見えます.
> 「指すアドレスは変更できないが、要素は変更できるポインター」
というのが対比として用いられていますが,こちら側も同様です.
(「要素」って何?)
