他のクラスのメソッドを呼びたい – プログラミング – Home

他のクラスのメソッドを呼びたい
 
通知
すべてクリア

[解決済] 他のクラスのメソッドを呼びたい


久島
 久島
(@久島)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

現在MFCでダイアログベースで作成しています。
CADialogからCBDialogを呼び出して、CBDialogでCADialogの
メソッドや変数を利用したいのですが、どのようにすればいいのでしょうか?
基本的なことで申し訳ありません。
---- ソース ---------------------------------------
<ADialog.h>
public:
void fun(tagA num);
typedef struct{
int iNum;
} tagA;
tagA num;

<ADialog.cpp>
CBDialog dlg;
INI_PTR iID=dlg.DoModal();

<BDialog.cpp>

// ここで、CADialogのtagA型の変数を宣言して、funに渡したい。

-------------------------------------------------

環境はMFCv6/Windows2000です。
よろしくお願い致します。


引用未解決
トピックタグ
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

>CADialogのtagA型の変数を宣言

CADialog::tagA a;


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

funに渡すのはまた別問題ですね。
ADialog::fun は (それがstaticではなければ) ADialogの実体に対して
呼び出しをしなければならない事は理解されてますか?
// ちょっと語弊のありそうな表現ですが・・・

ADialog::fun() を呼べばなんでもいいのであれば、

#include Adialg.h
BDialog::Foo(){

CADialog::tagA a;

ADialog adlg;
adlg.fun(a);
}

とするなり何なりで呼べますが・・・


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

あー変なコード書いちまった。なぐり書きはするもんじゃないですね。

void CBDialog::Foo(){

CADialog::tagA a;

CADialog adlg;
adlg.fun(a);
}

でしょうか。

余談ですけど、thisに(メンバに)アクセスしてなければ

CADialog* pDlg=NULL;
pDlg->fun();

でも呼べなくはないので、『実体に対して』という表現は適切じゃないんですよね。
なんて言えばいいんだろ。


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

いつもの手なのですが、こんなのはどうでしょう?

<BDialog.cpp>

#include ADialog.h

extern CADialog* pADlg;

void CBDialog::hoge()
{
CADialog::tagA a;

pADlg->fun(a);
}

<ADialog.cpp>

CADialog* pADlg;

// コンストラクタでthisを代入
CADialog::CADialog(CWnd* pParent /*=NULL*/)
: CDialog(CADialog::IDD, pParent)
{
pADlg = this;
}

寝ぼけてまた変な間違いしてないだろうな?>オレ


返信引用
久島
 久島
(@久島)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

できました。
丁寧な回答を頂き、本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました