昨日見た夢を教えて下さい

こんにちは。
初心者ですが、よろしくお願いします。

MFCを使用してダイアログベースのアプリケーションを作成しています。

<ヘッダ>
class Sample : public CDialog
{
(略)
public:
int SampleA(CString);
(略)

<ソース>
UINT SampleB(LPVOID pParam)
{
int n;

n = Sample::SampleA(CStringA) ←エラー
return 0;
}

メンバ関数ではない、SampleBから、上記のように呼出すと、「静的でないメンバ関数の中で呼び出しが正しくありません。」というエラーが表示されてしまいます。
ヘッダ内のメンバ関数宣言をstaticにすれば問題は解決できるのですが、このやり方しかないのでしょうか。

よろしくお願いします。

A 回答 (4件)

#1> Sample smp = new Sample();


#1> n = smp.SampleA(...)

マチガイ。正しくは:

Sample* smp = new Sample();
int n = smp->SampleA(...);
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

もっと勉強してみます。
ありがとうございました。

お礼日時:2005/05/09 22:03

なぜstaticでは駄目なのでしょう?


その理由はともかく、特定のインスタンスに依存しないのであれば、メンバ関数にする必要もないのでは?
privateメンバ等にアクセスする必要があるなら、friend関数でもOKかと。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

もっと勉強してみます。
ありがとうございました。

お礼日時:2005/05/09 22:03

Sample::SampleA()はstaticなメンバ関数ではないので、インスタンスを作る必要があります。



Sample s;
n = s.SampleA(CStringA);

でどうでしょうか。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

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

もっと勉強してみます。
ありがとうございました。

お礼日時:2005/05/09 22:02

C++ではオブジェクトというものを意識しなければいけません。



Sampleクラスはそのままでは使えません。
Sampleクラスのオブジェクトを生成しなければいけません。

int n;
Sample smp = new Sample();

n = smp.SampleA(...)

うーん、クラスの概念とオブジェクト指向に関して少し勉強されてみては?
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

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

もっと勉強してみます。
ありがとうございました。

お礼日時:2005/05/09 22:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報