クラス、構造体を引数とするには? – プログラミング – Home

クラス、構造体を引数とするには?
 
通知
すべてクリア

[解決済] クラス、構造体を引数とするには?


聖矢
 聖矢
(@聖矢)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

とても初歩的な事で恥ずかしいのですが、色々調べても分からないので教えてください。

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)の形にしないとエラーになる。
②(①の形に変更後)struct B b[][10]以下の引数が認識されない(class viewで
 funcにマウスを合わせると、引数がB b[][10]までしか表示されない)

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

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


引用未解決
トピックタグ
ten_bun
 ten_bun
(@ten_bun)
ゲスト
結合: 24年前
投稿: 19
 

STLのvector やら MFCのCArray を使ってBのコンテナクラスを引数にする。
もしくは、Bのポインタを使う。


返信引用
聖矢
 聖矢
(@聖矢)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

ten_bun様

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

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


返信引用
ten_bun
 ten_bun
(@ten_bun)
ゲスト
結合: 24年前
投稿: 19
 

主に二つの方法がある。
ただし、これは配列の要素数が分かっていなければできない。
配列を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
 ten_bun
(@ten_bun)
ゲスト
結合: 24年前
投稿: 19
 

訂正
1)で
(*(ppDim + NumS*i + k)).member;->(*(ppDim + NumT*i + k)).member;

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


返信引用
聖矢
 聖矢
(@聖矢)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

ten_bun様。
アドバイス本当にありがとうございました。お陰で、完成!・・・とまでは行かない
ものの、何とか先に進めそうです。助かりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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