• ベストアンサー

クラスのメンバ関数の呼出しについて

こんにちは。 初心者ですが、よろしくお願いします。 MFCを使用してダイアログベースのアプリケーションを作成しています。 <ヘッダ> class Sample : public CDialog { (略) public: int SampleA(CString); (略) <ソース> UINT SampleB(LPVOID pParam) { int n; n = Sample::SampleA(CStringA) ←エラー return 0; } メンバ関数ではない、SampleBから、上記のように呼出すと、「静的でないメンバ関数の中で呼び出しが正しくありません。」というエラーが表示されてしまいます。 ヘッダ内のメンバ関数宣言をstaticにすれば問題は解決できるのですが、このやり方しかないのでしょうか。 よろしくお願いします。

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

  • ベストアンサー
回答No.3

#1> Sample smp = new Sample(); #1> n = smp.SampleA(...) マチガイ。正しくは: Sample* smp = new Sample(); int n = smp->SampleA(...);

kerberos_001
質問者

お礼

ご回答ありがとうございます。 クラスそのものを使用することはできず、 インスタンスを生成しないといけないということは 頭の片隅に入っていたのですが、 忘れてしまっていました。 もっと勉強してみます。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

なぜstaticでは駄目なのでしょう? その理由はともかく、特定のインスタンスに依存しないのであれば、メンバ関数にする必要もないのでは? privateメンバ等にアクセスする必要があるなら、friend関数でもOKかと。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 クラスそのものを使用することはできず、 インスタンスを生成しないといけないということは 頭の片隅に入っていたのですが、 忘れてしまっていました。 もっと勉強してみます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • 0721919
  • ベストアンサー率22% (2/9)
回答No.2

Sample::SampleA()はstaticなメンバ関数ではないので、インスタンスを作る必要があります。 Sample s; n = s.SampleA(CStringA); でどうでしょうか。

kerberos_001
質問者

お礼

ご回答ありがとうございます。 クラスそのものを使用することはできず、 インスタンスを生成しないといけないということは 頭の片隅に入っていたのですが、 忘れてしまっていました。 もっと勉強してみます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • keroro001
  • ベストアンサー率23% (71/304)
回答No.1

C++ではオブジェクトというものを意識しなければいけません。 Sampleクラスはそのままでは使えません。 Sampleクラスのオブジェクトを生成しなければいけません。 int n; Sample smp = new Sample(); n = smp.SampleA(...) うーん、クラスの概念とオブジェクト指向に関して少し勉強されてみては?

kerberos_001
質問者

お礼

ご回答ありがとうございます。 クラスそのものを使用することはできず、 インスタンスを生成しないといけないということは 頭の片隅に入っていたのですが、 忘れてしまっていました。 もっと勉強してみます。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A