• ベストアンサー

ポインタの引数を持った関数の呼び出し方

ポインタの引数を持った関数の呼び出し方がわからず困っています。 呼び出したい関数は下記 enum{ TEST_TOP_MENU=0, TEST_MAIN1_MENU, TEST_MAIN2_MENU, TEST_MAIN3_MENU, TEST_AREA_TOP_MENU, }; void test_menu_mode(LCD_VIEW_MODE *view) { int ret_menu; switch(view->sub){ case TEST_MAIN1_MENU: ret_menu = test_main1_menu(); break; case TEST_MAIN2_MENU: ret_menu = test_main2_menu(); break; case TEST_AREA_TOP_MENU: ret_menu = test_area_top_menu(); break; } } この関数を呼び出すために main(){ //中略 LCD_VIEW_MODE test; test->sub = TEST_MAIN1_MENU; test_menu_mode(test); //中略 } このようにtest_menu_mode関数を呼び出すとエラーが出てコンパイルできないのですが、どこが問題なのでしょうか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

C言語を理解しないで、闇雲に進めるのは無理ですよ。 test.sub = TEST_MAIN1_MENU; test_menu_mode(&test); で、コンパイルエラーは無くなると思いますけど、意図通りに動くかどうかは、また別。

techhouse
質問者

お礼

回答頂きありがとうございました。 コンパイルエラーが解消されました。 ちょっと疑問に思っているのが、なぜ、 ”test->sub = TEST_MAIN1_MENU;”このように書いちゃいけないのかというのが残っているのですが、これはまた別の質問でやらせていただきます。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

どんなエラーが出たかを必ず提示してください。 解決への第一歩です。 testはポインタ変数ですか? もし違うとすると、アロー演算子は使えません。

techhouse
質問者

お礼

回答頂きありがとうございます。 大変申し訳ありません。 LCD_VIEW_MODE test; この”LCD_VIEW_MODE”というのは typedef struct _LCD_VIEW_MODE_ { BYTE mode; BYTE sub; WORD time; }LCD_VIEW_MODE; このような形の構造体になっています。 それとコンパイル時のエラー文は ”C2204 (E) Illegal member reference for "->"” が出力されました。 今H8_2368マイコンでプログラミングをやっています。

回答No.1

ポインタなんだからアドレスを渡しましょう。 test_menu_mode(&test);

techhouse
質問者

お礼

回答頂きありがとうございました。 なるほど、test_menu_mode関数に渡したい引数データはtestのデータのアドレスということになるのですね。だから ”test_menu_mode(&test);”って書いているのですね。