- くだすれC++/CLI(初心者用)part2
815 :デフォルトの名無しさん[sage]:2014/03/23(日) 21:20:34.11 ID:HlHPSHO4 - 質問失礼します
クラスaの配列をメンバ変数に持つクラスbを作りたいのですが、クラスaの配列の初期化がうまく行きません。(コンパイル自体はできます) これは初期化の方法が間違っているのでしょうか? それともそのような設計(クラス配列を持つクラス)自体がよろしく無いものなんでしょうか? ref class a { int x; public: a(int num){x = num;} }; ref class b { array<a^>^ array_a; public: b(){ array_a = gcnew array<a^>(10); for (int i = 0; i < array_a->Length; i++) { array_a[i] = gcnew a(i); } } };
|
- くだすれC++/CLI(初心者用)part2
817 :デフォルトの名無しさん[sage]:2014/03/23(日) 22:35:57.72 ID:HlHPSHO4 - 実体がない(?)と言いますか、array_aに何かしようとすると、その関数のそれ以降の処理をすっ飛ばすようになります。
例えばクラスaにint GetX(){return x;}、 クラスbにint GetArrayA(int num){return array[num]->GetX();}みたいな関数を追加して、 ウィンドウズFormの方でLabelを一つ用意します。 private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { b^ test; test->GetArrayA(0); Label1->Text = "だいじょうぶ"; } これだと、Label1->Textは「だいじょうぶ」に変わらずLabel1のままです。 しかし >test->GetArrayA(0); の部分をコメントアウトにするとLabel1->Textは「だいじょうぶ」になります。
|
- くだすれC++/CLI(初心者用)part2
819 :デフォルトの名無しさん[sage]:2014/03/23(日) 23:36:35.34 ID:HlHPSHO4 - >>818
817もコンパイルは通ります あと、今試してみたんですが出来上がったexeファイルを起動してみると 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。(中略) オブジェクト参照がオブジェクトインスタンスに設定されていません」 と出ますね…… こちらもまたtest->GetArrayA(0);の部分をコメントアウトすると問題なく起動します
|