Atmel 6.2 を使用して、Arduino 用のアプリケーションを作成しています。次のコード行に問題があります。
int total = 3;
uint64_t myarray[total] = {};
次のエラーが発生します
エラー: バインドされた配列は、']' トークンの前の整数定数ではありません
なぜこうなった?
Atmel 6.2 を使用して、Arduino 用のアプリケーションを作成しています。次のコード行に問題があります。
int total = 3;
uint64_t myarray[total] = {};
次のエラーが発生します
エラー: バインドされた配列は、']' トークンの前の整数定数ではありません
なぜこうなった?
これ
int total = 3;
uint64_t myarray[total] = {};
配列のサイズはコンパイル時の定数式ではないため、可変サイズ配列の定義です。
このような種類の配列は、条件付きで C99 によってサポートされています。ただし、この機能は C++ には存在せず (ただし、一部のコンパイラは C++ にこの機能を含む独自の言語拡張機能を持つことができます)、コンパイラは正しくエラーを発行します。
たとえば、次のように配列の定義で定数を使用する必要があります
const int total = 3;
uint64_t myarray[total] = {};
std::vector<uint64_t>
または、実行時に配列のサイズを変更できると思われる場合など、別のコンテナーの使用を検討する必要があります。
コンパイル時の定数 (またはconstexpr
s) を配列サイズとして指定する必要があります。
これを使って:
const int total = 3;
「合計」は const である必要があります。また、C スタイルの配列よりも std::array の方が好みです (個人的な好みです)。
int const total = 3;
std::array<uint64_t, total> values = {};
動的配列が必要な場合は、std::vectorを使用してください。
あなたの質問はあまり明確ではありません。初期化をゼロにしたい、またはエラーを修正したいです。
提案されているように、コンパイル時の定数式を使用してエラーを修正できます。
const int total = 3;
uint64_t myarray[total] = {};
ゼロ初期化するには、次のコードを使用できます。
std::fill_n(myarray, total, 0);
ただし、可変サイズの配列が必要な場合は、次の方法でポインターを使用して実行できます。
int total = 3;
uint64_t *myarray = new uint64_t [total]; // This will be created at run time