メンバ変数について – プログラミング – Home

通知
すべてクリア

[解決済] メンバ変数について


mua
 mua
(@mua)
ゲスト
結合: 22年前
投稿: 26
Topic starter  

メンバ変数について質問いたします。
私は、qaqaクラスにメンバ変数path_aを定義して、別クラスから呼び出そうと思っている
のですが、どうしてもうまくいかないところがあります。

実行順序は、まずqaqaのダイアログを表示させ、ssaにパスを代入します。
その後、呼び出し側のダイアログを表示させ、ボタンをクリックします。
そうするとssaに代入されたパスに、ファイルアクセスしようとします。

qaqaのヘッダファイルには以下のように定義が記述されました。

// コンストラクション
public:
  char ssa[MAX_PATH];

そしてqaqaのソースファイルには以下のように

  GetModuleFileName( NULL, ssa, MAX_PATH );

と、記述しパスを挿入しました。

呼び出し側のソースファイルには以下のように記述されています。
このファイルオープンは、ダイアログ上のボタンをクリックしたときに実行されます。

  #include qaqa.h

  ifstream fin1;
  qaqa myDL;
  fin1.open(myDL.ssa);

この状態で、myDL.ssaの中身を表示させてみると、パスが入っていませんでした。
そして不思議なことに、以下のように記述して、myDL.ssaの中身を表示させてみると、
なんと、パスが表示されたのです。

  qaqa myDL;
  myDL.DoModal();
  fin1.open(myDL.ssa);

これはいったいどういうことなのでしょうか?
なぜmyDL.DoModal();と記述しなければ、パスがmyDL.ssaに入っていないのでしょうか。


引用未解決
トピックタグ
mua
 mua
(@mua)
ゲスト
結合: 22年前
投稿: 26
Topic starter  

Win2000 VC6.0SP2 MFC
<対象:VC++ラウンジ>

開発環境を書き忘れてしまいました。
大変申し訳ございませんでした。


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

qaqaのソースファイルのどこで、GetModuleFileName()を呼んでいるのでしょう?
 コンストラクタ?
 OnInitDialog()?


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

OnShowWindow(BOOL bShow, UINT nStatus)で呼んでいます。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

qaqa::OnShowWindow関数が呼ばれる前に
fin1.open(myDL.ssa);
を呼ぼうとしているからです

それぞれにブレークポイントを置いて
デバッカで追えばわかるのでは・・


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

あなたのやってること(やりたいこと?)は

ifstream fin1;
char ssa[ MAX_PATH ];
GetModuleFileName( NULL, ssa, MAX_PATH );
fin1.open( ssa );

と同じなのでは?

そうでなければこっちを試してみては?

CFileDialog fd( TRUE );//「ファイルダイアログ」を使う
int val = fd.DoModal();//ファイルダイアログを表示し、
if ( val == IDOK )//ファイルが選択され「開く」ボタンが押されると
{
CString path = fd.GetPathName();//選択されたファイルのフルパス(CString形式)
ifstream fin1;
fin1.open( LPCTSTR( path ) );//CStringを文字列ポインタに直して渡す
}


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

やはり、タイミングが問題だったようです。
OnShowWindow関数ではなく、
qaqaのダイアログを表示させる関数内で、ssaに値を代入したら、うまく動きました。
どのような順序で、値が変数に代入されたり、ダイアログが呼ばれたりするのか、
もう少し、考えてみる必要がありそうです。

返信してくださったみなさま、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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