- 締切済み
関数、構造体
まだ、C++の質問ですが、 struct AotU { int num; }; vodi value(Aotu a) { cin>>a.num; } void king(int k) { cout<<k; } int main() { Aotu c; value(c); king(c.num); return 0; } 上のようなコードでコンパイルができますが、 実行するとエラー出るのがなぜでしょうか? このように構造体、関数を使えないでしょうか? よろしく、お願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- xi_fjw_ix
- ベストアンサー率100% (2/2)
確認ですが、「実行するとエラー出る」というのは、「質問者:tuyafu0803さんが意図した通りにプログラムが動作しない」ということでしょうか? 「関数value()で設定した値が、関数king()で出力されない」ということをエラーと表現しているだけだとしたら原因は関数間の値の渡し方の問題です。 呼び出した関数の中で引数に値を設定あるいは、引数の値を変更して返却したい場合は、ポインタで渡してください。 関数value()の引数は、構造体AotUのポインタとして受け取ります。関数main()から関数value()を呼び出す場合の引数は変数cのポインタを渡してやります。 関数value()は、以下のように変更が必要です。 void value(AotU a) { cin >> a.num; } ↓ 変更 void value(AotU *a) { cin >> a->num; } 関数main()は、以下のように変更が必要です。 int main() { AotU c; value(c); king(c.num); return 0; } ↓ 変更 int main() { AotU c; value(&c); king(c.num); return 0; } 以上です。
- Wr5
- ベストアンサー率53% (2173/4061)
#1さんの指摘で無事コンパイルできるようになったとして… value()で入力した値はking()で表示はされませんがそこのところは意図通りですか? # 32ビットな環境であれば4294967295分の1の確率で入力した値が表示されますが。 ローカル変数について追加で勉強されるとよいでしょう。
- asuncion
- ベストアンサー率33% (2127/6289)
>struct AotU >vodi value(Aotu a) AotU と Aotu の名前が一致していないのと、 void と書くべきところが vodi であるため、 コンパイルできません。 せっかくですから、ヘッダーファイル等を含め、 コンパイルが通ったお手持ちのソースを 「そっくりそのまま」コピー&ペーストしていただけますか?