プログラムに次のコード行を書きました。
const int *dims = {4};
しかし、それは私に次のエラーを報告しました:
「型 int の値を使用して、型 const int のエンティティを初期化することはできません」
何が起こったのか教えて、それを修正する方法を教えてもらえますか?(配列dims
がまだであるという条件でconst
)
プログラムに次のコード行を書きました。
const int *dims = {4};
しかし、それは私に次のエラーを報告しました:
「型 int の値を使用して、型 const int のエンティティを初期化することはできません」
何が起こったのか教えて、それを修正する方法を教えてもらえますか?(配列dims
がまだであるという条件でconst
)
このコードconst int *dims = {4};
は、ポインター dims に値 4 を割り当てることを意味します。しかし、ポインターがメモリ位置 4 を指すようにする必要があるのはなぜでしょうか。それがあなたが望むことである可能性は非常に低いので、それを行うことは許可されていません。
値 4 の const int へのポインターを取得するためのいくつかのオプションを次に示します。
const int *dims = new int(4); // beware someone needs to delete dims
スタックのように、自動有効期間の場合:
const int autoDims(4); // Will be deleted when autoDims goes out of scope
const int *dims(&autoDims);
また:
const int dims[] = {4}; // Will be deleted when dims goes out of scope
値 4 のポインターが本当に必要な場合は、ポインター型に明示的にキャストする必要があります。
const int *dims = (int *)4;
ポインターを整数で初期化しようとしているため、コンパイラーは不平を言っています。
あなたが参照している関数は、おそらく配列が渡されることを期待しています。次のように、定数配列で呼び出すことができます。
const int dim[4] = {1,2,3,4};
foo(dim);