CArrayについて2

[戻る]
大三元 2006/06/20(火) 09:09:23
大三元です。
VC++6.0 XP ダイアログベース

int xxx;

typedef struct{
    BYTE  aaa;
    WORD  bbb;
    DWORD ccc;
} KATA;

CArray<KATA, KATA> m_def;
CArray<KATA*, KATA*> m_1;
CArray<KATA*, KATA*> m_2;

CArray* zzz;


switch( xxx ){
case 0:
    zzz = m_def;
    break;    
case 1:
case 3:
case 5:
    zzz = m_1;
    break;    
case 2:
case 4:
    zzz = m_2;
    break;    

ポインタに代入して!!
それぞれの要素にアクセスしたいのですが
上記のようにやると
エラーになります。

zzzの型はどのように
宣言すればいいのでしょうか?

大三元 2006/06/20(火) 09:23:10
CArray<KATA, KATA>* zzz;
zzz = m_def;

CArray<KATA*, KATA*>* zzz;
zzz = m_1;

これでいけるっぽいですね!?
型が違うから同じポインタにはできなそうですね?

Blue 2006/06/20(火) 11:03:40
> これでいけるっぽいですね!?
いけません。
m_defやm_1はポインタ型ではないです。&をつけないといけないのでは。

> 型が違うから同じポインタにはできなそうですね?
できません。
できたとしても、実際にそれを使うときにどのような型なのか判定するのが必要になり
ます。
(無理やりLONG型にreinterpert_castしてってことはできますが)


実際にどのようなことをしたいのでしょうか?

Ban 2006/06/20(火) 11:16:48
ポリモーフィックに書いた方がいい可能性もありそうです。
Blue さんも書かれているように、もう少し「何がしたいのか」を具体的に書いてくださ
い。

Blue 2006/06/20(火) 11:39:59
というか
> CArray<KATA, KATA> m_def;
もKATA*にできないのかなぁ。

大三元 2006/06/20(火) 12:58:19
>m_defやm_1はポインタ型ではないです。&をつけないといけないのでは。
その通りです。
&付けて書いたつもりだったんですが・・・
抜けていました。
すいません。

>実際にどのようなことをしたいのでしょうか?
m_defには実体が格納されています。
m_1,m_2にはm_defの要素の中から選ばれたインデックスの
ポインタを格納してあります。
xxxの値によりどのメンバの内容を使うか変わります。
この内容をテキストファイルに保存します。

大三元 2006/06/20(火) 13:06:06
ちょっとやり方を変えて、
CArray<KATA*, KATA*> m_1;
CArray<KATA*, KATA*> m_2;
を
CArray<WORD*, WORD*> m_1;
CArray<WORD*, WORD*> m_2;
として、
m_defの配列のインデックスを格納することにしました。
これで、KATAの情報を取得して保存文字列を作成しました。
xxx==0の時は、m_defの情報をから直接KATAの情報を取り出すことにしました。

大三元 2006/06/20(火) 15:47:14
[[解決]]
解決とします。

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