- 締切済み
[VC++]ヘッダファイルからの関数コール
Formのボタンクリックイベント(Form.h)から 別ファイル(.cpp)の関数をコールしたいのですがうまくいきません、 どのようにすればよいでしょうか?ご教授お願いします。 1> : error C2144: 構文エラー : 'void' は ')' によって先行されなければなりません。 1> : error C2059: 構文エラー : ')' //----- main1.h #include <stdio.h> #include "Form1.h" namespace A { void main1(); } //----- main1.cpp #include <stdio.h> #include "main1.h" using namespace A; void main1() { //処理 } //----- Form1.h #include <stdio.h> #include "main1.h" void main1(void); namespace A { public ref class Form1 : public System::Windows::Forms::Form { public: private: System::Void btn_Click(System::Object^ sender, System::EventArgs^ e) { //★クリックイベントからmain1の関数コールしたい main1(void); } }; }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- D-Matsu
- ベストアンサー率45% (1080/2394)
using namespaceは「その名前空間にあるシンボルを使う」という宣言だけで名前空間そのものの宣言ではありません。 つまり、main.hの > namespace A { > void main1(); > } とmain.cppの > using namespace A; > void main1() > { > //処理 > } は「名前空間が違う別の関数」扱いな訳です。 ではどうするか、という話なんですが、main.cppの方もmain.hに倣った記述をすればいいだけです。
- D-Matsu
- ベストアンサー率45% (1080/2394)
(main1.cpp) > using namespace A; > void main1() > { > //処理 > } この書き方では、関数main1()は名前空間Aに配置されません。
- asuncion
- ベストアンサー率33% (2127/6289)
>//★クリックイベントからmain1の関数コールしたい >main1(void); 引数のない関数を呼び出すとき、引数リストに 「void」の記述がいるのでしたか?
補足
回答ありがとうございます。 すみません、誤りですね。。 voidを削除「main();」したらこちらのエラーが出てしまいました。 本来のエラーはこちらですね。。 1>Form1.obj : error LNK2028: 未解決のトークン (0A000011) "void __clrcall A::main1(void)" (?main1@A@@$$FYMXXZ) が関数 "private: void __clrcall A::Form1::btn_Click(class System::Object ^,class System::EventArgs ^)" (?btn_Click@Form1@A@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 1>stdafx.obj : error LNK2028: 未解決のトークン (0A000047) "void __clrcall A::main1(void)" (?main1@A@@$$FYMXXZ) が関数 "private: void __clrcall A::Form1::btn_Click(class System::Object ^,class System::EventArgs ^)" (?btn_Click@Form1@A@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 1>AA.obj : error LNK2028: 未解決のトークン (0A000023) "void __clrcall A::main1(void)" (?main1@A@@$$FYMXXZ) が関数 "private: void __clrcall A::Form1::btn_Click(class System::Object ^,class System::EventArgs ^)" (?btn_Click@Form1@A@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 1>AA.obj : error LNK2019: 未解決の外部シンボル "void __clrcall A::main1(void)" (?main1@A@@$$FYMXXZ) が関数 "private: void __clrcall A::Form1::btn_Click(class System::Object ^,class System::EventArgs ^)" (?btn_Click@Form1@A@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z) で参照されました。 1>stdafx.obj : error LNK2001: 外部シンボル ""void __clrcall A::main1(void)" (?main1@A@@$$FYMXXZ)" は未解決です。 1>Form1.obj : error LNK2001: 外部シンボル ""void __clrcall A::main1(void)" (?main1@A@@$$FYMXXZ)" は未解決です。
補足
>この書き方では、関数main1()は名前空間Aに配置されません。 main.hで namespace A { void main1(); } としているのですが、だめなのでしょうか? どうすれば名前空間に配置することが可能なのでしょうか?