クラス、構造体を引数とするには?

[戻る]
聖矢 2001/05/05(土) 17:45:31
とても初歩的な事で恥ずかしいのですが、色々調べても分からないので教えてください。

MFCで、クラスAと構造体Bを作り、Aの配列、Bの配列(2次元)、int型を引数として
void func(A *a,B b[][10],int n)
という関数を作ったのですが

@引数を(class A *a,struct B b[][10],int n)の形にしないとエラーになる。
A(@の形に変更後)struct B b[][10]以下の引数が認識されない(class viewで
 funcにマウスを合わせると、引数がB b[][10]までしか表示されない)

という2つで先に進めなくなってしまいました。
本などには@のような書き方はしてないので、どうも気になります。
Aに関しては、全くのお手上げです。

どなたか宜しくお願いします。

ten_bun [E-Mail] 2001/05/06(日) 14:55:42
STLのvector やら MFCのCArray を使ってBのコンテナクラスを引数にする。
もしくは、Bのポインタを使う。

聖矢 2001/05/06(日) 23:42:46
ten_bun様

コンテナクラスを引数にするか、ポインタを使う・・との事なので、なじみのあるポインタ
を使って実現したいのですが(コンテナクラスは使った事がないもので・・・)、どのよう
に書けばいいのでしょうか?

B[][10]という書き方は、C言語の本に載っていた(char型でしたが・・・)のですが、
VCではこのような書き方はダメなんですか?

ten_bun [E-Mail] 2001/05/07(月) 03:00:42
主に二つの方法がある。
ただし、これは配列の要素数が分かっていなければできない。
配列をSample[S][T]とする。

1)ポインタを使う方法。
Func_00(B* ppDim,const int NumS,const int NumT){
   for(int i=0;i<NumS;i++){
      for(int k=0;k<NumT;k++){
         //これでSample[i][k]のメンバを参照。
         (*(ppDim + NumS*i + k)).member;
            }  
   }
}
//関数のコールの仕方は
Func_00(&Sample[0][0],S,T);

2)配列ポインタを使う方法
Func_01( B(*pDim)[T],const int NumS,const int NumT){
   for(int i=0;i< NumS;i++){
      for(int k=0;k<NumT;k++){
         //これでSample[i][k]のメンバを参照。
         pDim[i][k].member;
            }  
   }

}
//関数のコールの仕方は
Func_01(&Sample[0],S,T);


実はtemplateを使う方が楽だったりする。
template<Temp>
void
Func_Temp(Temp Dim,const int NumS,const int NumT){
   for(int i=0;i< NumS;i++){
      for(int k=0;k<NumT;k++){
         //これでSample[i][k]のメンバを参照。
         Dim[i][k].member;
            }  
   }
}
//関数のコールの仕方は
Func_Temp(Sample,S,T);

ten_bun [E-Mail] 2001/05/07(月) 10:47:26
訂正
1)で
(*(ppDim + NumS*i + k)).member;−>(*(ppDim + NumT*i + k)).member;

(ppDim + NumT*i + k)->member;//も可

聖矢 2001/05/11(金) 01:48:51
[[解決]]
ten_bun様。
アドバイス本当にありがとうございました。お陰で、完成!・・・とまでは行かない
ものの、何とか先に進めそうです。助かりました。

古いスレッドには追加発言できません。