私はC++の私の最初のプロジェクトに取り組んでいるJavaプログラマです。配列の扱い方を理解するのは苦労しています。私は次のコードと構造的に同等なプログラムを作成しようとしています。しかし、私の実際のプロジェクトでは、class A
とstruct B
がヘッダファイルで宣言されています。私がこれを理解する方法は、b.arr[2]
というステートメントが配列b.arr
の長さをインスタンス化するということです。しかし、次のコードをそのまま実行すると、エラーexited with non-zero status
が発生します。 b.arr [1]をa2に設定する行をコメントアウトすると、うまく動作します。なぜこれが、私はこれをどうすればよいのでしょうか?また、b.arr配列を別の長さに再定義できる方法はありますか?私は周りを見回しましたが、私は見つけることができないこの特定の問題に対処するようです。C++オブジェクトの配列の要素を定義する
class A {};
struct B {
A *arr[];
};
int main() {
B b;
b.arr[2]; // instantiates array to be of length 2?
A a1;
A a2;
b.arr[0] = &a1;
b.arr[1] = &a2; // RUNS FINE WITHOUT THIS LINE
}
ありがとう!
私はarduinoライブラリのためにこれを書いています。だから、私はstd名前空間を使うことができません。
[book](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を読んで、ランダムなものを試してください。あなたが注意しなければあなたの窓を通ってvelociraptorをジャンプするかもしれないC++で未定義の動作と呼ばれるこのことがあります。 – user463035818
'b.arr [2]'は未定義の動作です。割り当てられていない配列の要素3にアクセスします。 –
実行時にサイズを設定または変更できる動的配列を作成する場合は、['std :: vector'](http://en.cppreference.com/w/cpp/container/vector )。コンパイル時にサイズが固定された配列が必要な場合は、['std :: array'](http://en.cppreference.com/w/cpp/container/array)をお勧めします。 –