• ベストアンサー

VC++「オブジェクト参照がオブジェクト・・・・

Stringで2次元配列をやりたいと思っているのですが、 array<array<String^>^>^ addr_eeprom02; このような宣言をしたのですが、 次のようなプログラムを実行使用とすると addr_eeprom02[cnt_test][1] = data->Substring( 1, 8 ); ビルドは通ったのですが、デバッグしていくと 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 というエラーが出ます。 解決方法などありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

その記法で書く場合、addr_eeprom[]の各要素はgcnewで確保する必要があります。 C++/CLI的な二次元配列は array<String^, 2> で宣言して addr_eeprom[cnt_test,1] でアクセスするのが一般的です。

参考URL:
http://vene.wankuma.com/ecma372/24_cli_array.aspx
diy_sunny
質問者

お礼

回答いただきありがとうございました。参考サイトも紹介していただき助かりました。 array<String^,2>^ addr_eeprom02 = { {"test","test2","test3"},{"test","test2","test3"} }; という宣言でメッセージ出てこなくなりました!

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

まず、「ビルドが通った」は文法が間違ってないだけでプログラムの間違いまでは検出しません。 で、C++/CLIのarrayはCの配列と違って領域確保済みではありません。 > array<array<String^>^>^ addr_eeprom02; は、Cっぽく表現を変えると String** addr_eeprom02; ということです。 #これでコンパイルが出来る訳ではもちろんありません。便宜上の表記です 要はaddr_eeprom02に配列のオブジェクトを作っていないのが原因。

diy_sunny
質問者

お礼

回答いただきありがとうございます。 ネット上で”「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 ” これが出る原因をしらべてみたら、配列内がnullでそれにアクセスするから出てくるということが書かれてました。たぶんnullじゃないようにすればいいとおもうのですが、 通常の配列を宣言 array<String^>^ addr_eeprom = {"test","test2","test3"}; このように宣言した際に addr_eeprom[0] = data->Substring( 1, 8 ); addr_eeprom[1] = data->Substring( 1, 8 ); addr_eeprom[2] = data->Substring( 1, 8 ); このプログラムを正常に実行できたのですが、 array<array<String^>^>^ addr_eeprom02 = { {"test","test2","test3"} {"test","test2","test3"}          }; 多元配列の場合はこのような宣言の仕方をすればよいのでしょうか?これだとエラーがでてしまったのですが・・・