- ベストアンサー
OKボタンをクリックした時に、エディットボックスを操作したい
こんにちは。 表題の通り、MFCのダイアログベースでワークスペースを作ったときに、はじめから作成されるコードに加えて long fun1(); void CTestDlg::OnOK() { long ret; ret = func1(); } long fun1() { m_ed1.SetWindowText("あいうえお"); } のようにすると、「定義されていない識別子です。」と「左側がクラス、構造体、共用体ではありません」とのメッセージが出るのですが、これはどこをどう直せばいいんですか? ただし、m_ed1はコントロール変数として宣言しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
func1 ()という関数は、普通の関数でなくちゃだめですか?今回のような場合ですと、通常 CTestDlgのメソッドにします。 // メソッドにした場合(当然クラスの宣言部(.h)で宣言します) long CTestDlg::func1 () { m_ed1.SetWindowText("あいうえお"); return ??; } // --------------------------------------- // 普通の関数にする場合 long func1 (CTestDlg *dlg) { dlg->m_ed1.SetWindowText("あいうえお"); return ??; } void CTestDlg::OnOK () { long ret; ret = func1 (this); } とこんな感じになると思います。
その他の回答 (3)
- neko3839
- ベストアンサー率37% (100/269)
・CTestDlgクラスのオブジェクト宣言は、アプリケーションクラス(CTestApp?)の .cpp に無いですか? ・m_ed1 はどこで定義されているのですか?ANo.2の回答を見た限りでは、CTestDlgクラスのメンバではないでしょうか?
- Trick--o--
- ベストアンサー率20% (413/2034)
>・CTestDlgクラスのオブジェクト宣言がどこにも見当たらない事 CTestAppクラス内にありませんか? ダイアログベースだと、ここからDoModal()で呼び出しています。 >・m_ed1は、publicのようですが、外部からアクセスできないのは何故なのか スコープが違います。 func1()から見ることの出来る場所は、関数内とグローバルだけです。 CTestDlg *pDlg; /* ここでpDlgにメインのダイアログを対応させる */ pDlg->m_ed1.SetWindowText("あいうえお"); などとすればアクセスできるでしょう。
補足
回答ありがとうございます。 > CTestAppクラス内にありませんか? ありました。確認できました。 > CTestDlg *pDlg; > pDlg->m_ed1.SetWindowText("あいうえお"); これはできませんでした。CTestDlg *pDlgは、func1内で宣言すると言う事で正しいですか?
- ataka304
- ベストアンサー率40% (9/22)
もしかして func1 と fun1 のスペルミス・・ ですか?
お礼
必死で調べて、func1を CTestDlgのメンバ関数にする事で解決できました。ただ、疑問に残るのが ・CTestDlgクラスのオブジェクト宣言がどこにも見当たらない事 ・m_ed1は、publicのようですが、外部からアクセスできないのは何故なのか 以上がわかりません。どなたか教えていただけませんか。
補足
あとで気がつきました、fun1はfunc1の間違いです。が、これは簡略化して書いたので実際は違う名前です。原因ではありません。 すみません、ここは忘れてください。
補足
このやり方で見事動きました。ありがとうございます。 > func1 ()という関数は、普通の関数でなくちゃだめですか? どちらかと言うとそのほうが望ましいケースでした。