- ベストアンサー
構造体配列のポインタを引数に
こんばんは。 Visual C++ 2008 Express Edition を使っています。 C++のあるプログラム内の関数で、構造体の1次元配列のポインタを引数に取ろうと思っているのですが上手くいきません。 関数の目的としては、関数側と呼び出す側のファイルを分けているので、関数側のグローバルな構造体配列のアドレスに呼び出し側の構造体配列のアドレスを代入することです。 構造体はExampleと型を定義してあります。 ・関数側 Example *global_ex[10]; void GetEx(Example *ex[]) // ←2つ目のエラー { global_ex = ex; // ←1つ目のエラー } ・呼び出し側(呼び出し側の関数内) Example ex[10]; (exの初期化) GetEx(&ex); ・エラー error C2440: '=' : 'Example *[]' から 'Example [15]' に変換できません。配列型への変換はありませんが、参照またはポインタから配列への変換があります。 error C2664: 'GetEx' : 1 番目の引数を 'Example (*)[15]' から 'Example *[]' に変換できません。 プログラムとエラーは以上です。 何をすれば解決できるのか、ご存じの方いらっしゃいましたらよろしくおねがいします。 CとC++は独学で学んでいるので偏りがあると思います。 「基本的な○○が分かっていないのでは?」と感じたらその点もご指摘頂けると嬉しいです。。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、やりたいことは、 ・関数側 Example *global_ex; // [10]をとる void GetEx(Example *ex) // []をとる { global_ex = ex; } ・呼び出し側(呼び出し側の関数内) Example ex[10]; (exの初期化) GetEx(ex); // &を取る と直せばできるんでしょう。 >「基本的な○○が分かっていないのでは?」と感じたらその点もご指摘頂けると嬉しいです。。 そうですね。配列とポインタの関係をもう一度、見直してみたらと思います。確かに混乱しやすいんですが。
その他の回答 (1)
- trapinmind
- ベストアンサー率53% (8/15)
手元に環境がないので適当ですが Example (*global_ex)[10]; Example (*ex)[] では、ダメですかねぇ。 []演算子より*演算子の方が優先度が低いようなので。
お礼
これでもやはり[]と[10]とで型が違うといわれてしまいました^^; *や[]の優先度については考えていなかったので、これからそういう面でも見ていこうかと思います! ありがとうございました^^
補足
すみません、本文で少し訂正するところがあったので、場所をお借りします。 【訂正】 最後のエラーの配列で [15] となっているのは [10] の間違いです。
お礼
できました! ポインタだけにすると良かったんですね。。 はい、こういう考えにすぐたどりつけるよう、もう一度配列とポインタの関係を見直してみようかと思います。 ありがとうございました^^