最新閲覧日:

サーバー上からファイルをダウンロードするアプリを
作成しているものです。

ClassAとClassBが存在するとして、
ClassAでファイルをダウンロードする処理を記述し、
ClassBでプログレスバーを含むダイアログを作成しています。
ClassAのファイル読み込みのループ処理のカウンターを
プログレスバーのメンバー変数m_plgと同調させたい。

ClassA
 for(i=0;i<count;i++){
 }
ClassB
 m_plg.SetRange(0,count);
m_plg.SetPos(i);

かなり簡略化してます。
上記内容は実現可能だと思うのですが、メンバー変数の宣言部がおかしいのか
m_plgは宣言されていませんとエラーがでます。
メンバー変数の理解不足だと思うのですが、このような処理を行いたい場合は
どちらのClassにも認識されるようなコントロールのメンバー変数はどのようにして
宣言すればよろしいのでしょうか?

開発環境はVC++6.0 MFC ダイアログです。

A 回答 (2件)

VCは使ったことないんでプログレスバーを


表すクラスの名前が分からないので、ここでは
class ProgBarだとすると、class Bはこんな
感じですか?

class B {
public:
 B(){
  ...
  m_plg.SetRange(0, count);
  ...
 }
 ...
 ProgBar m_plg;
 ...
};

m_plgを直接class Aからいじろうと
思うなら、class Bの中でpublicフィールド
内で宣言しなければなりません。

で、class A内で、

class A {
 ...
 void report_progress(){
  for( int i = 0 ; i < 100 ; i++ ){
   ...
   dialogbox.m_plg.SetPos(i);
  }
 }
 ...
 B dialogbox;
 ...
};

てな感じのことをしたいんですかね。

だとすると、以上のプログラム例のように、
B内でm_plgをpublicで宣言し、A内で
Bのインスタンスを生成(または外部から
ポインタかリファレンスで受け取る)、
そのBのインスタンスからm_plgをメンバ参照する、
ということで良いと思いますが。
    • good
    • 0

簡略化というよりも、意図することが正確に伝わってきません。


クラスとインスタンスの関係について、少し調べられてはどうでしょう?

ClassB のインスタンスが Dialog だとしたら、ClassA 側から、Dialog.m_plg とアクセスすることはできます。もちろん public でなければなりません。
    • good
    • 0

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


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ