大三元です。
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の型はどのように
宣言すればいいのでしょうか?
CArray<KATA, KATA>* zzz;
zzz = m_def;
CArray<KATA*, KATA*>* zzz;
zzz = m_1;
これでいけるっぽいですね!?
型が違うから同じポインタにはできなそうですね?
> これでいけるっぽいですね!?
いけません。
m_defやm_1はポインタ型ではないです。&をつけないといけないのでは。
> 型が違うから同じポインタにはできなそうですね?
できません。
できたとしても、実際にそれを使うときにどのような型なのか判定するのが必要になり
ます。
(無理やりLONG型にreinterpert_castしてってことはできますが)
実際にどのようなことをしたいのでしょうか?
ポリモーフィックに書いた方がいい可能性もありそうです。
Blue さんも書かれているように、もう少し「何がしたいのか」を具体的に書いてくださ
い。
というか
> CArray<KATA, KATA> m_def;
もKATA*にできないのかなぁ。
>m_defやm_1はポインタ型ではないです。&をつけないといけないのでは。
その通りです。
&付けて書いたつもりだったんですが・・・
抜けていました。
すいません。
>実際にどのようなことをしたいのでしょうか?
m_defには実体が格納されています。
m_1,m_2にはm_defの要素の中から選ばれたインデックスの
ポインタを格納してあります。
xxxの値によりどのメンバの内容を使うか変わります。
この内容をテキストファイルに保存します。
ちょっとやり方を変えて、
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の情報を取り出すことにしました。
解決とします。