CArrayStringを含む構造体の配列化

[戻る]
める 2007/06/11(月) 14:15:14
お世話になります。環境はVC6 SP5 Win2Kです。

と、ある構造体(AAA)がありまして、
これを複数束ねた構造体(BBB)を作りました。
このBBBの構造体の個数が可変となる為、
CArrayを使って動的配列にしようとしている次第です。

typedef struct AAA_
{
  int      Check;
  CStringArray FileNames;
}AAA;

typedef struct BBB_
{
  int nIndex;
  AAA A_Data;
  AAA B_Data;
  AAA C_Data;
}BBB;

CArray <BBB, BBB&> Array;
BBB SendData;

この定義でビルドをすると
「'operator =' が、指定されたクラスに定義されていません。」
と表示されるのですが、どこをどう修正すれば
使えるようになるか解りません。どなたかご教授下さい。

たいちう 2007/06/11(月) 14:50:24
VC6 SP6 XP2000 の環境で、上記コードを試したところ、
全角スペースがある他は、エラーが出ませんでしたが。

たいちう 2007/06/11(月) 14:51:41
XP2000って何だよ orz...
XP Pro SP2のことです。

める 2007/06/11(月) 16:32:38
あ。すみません。
抜けてました。
定義だけだとうまくいきます。

SendDataに値を入れて、

Array.push_back(SendData);

とやるとこのラインでエラーが出ます。

Blue 2007/06/11(月) 16:41:44
>Array.push_back(SendData);
CArrayにpush_backというメソッドはないようですけど。

[MSDN]CArray
http://msdn2.microsoft.com/en-us/library/7y7b8fx3(VS.80).aspx

ITO 2007/06/11(月) 18:23:56
push_backは、C++テンプレートの関数のメゾットみたいですね。

yoh2 [E-Mail] 2007/06/11(月) 22:55:19
今手元に実験できる環境がないので想像になりますが、
下リンクの内容が原因じゃありませんか?(バージョン違いのリンクですが)

http://msdn2.microsoft.com/ja-jp/library/ccb3dh5c(vs.80).aspx

CStringArrayはCObjectから派生していますし、operator=のオーバーライドもされて
いなかったような記憶があります。
クラスAAA_でoperator=を定義して、FileNamesの要素をひとつひとつコピーするように
すれば解決するのではないでしょうか。

別解: CStringArrayではなくstd::vector<CString>を使う。MFC使ったりSTL使ったりでは
ポリシーが一貫しなくなってしまいますが。

# しかし、"unavailable"を「定義されていない」と訳すか、MSよ……

める 2007/06/12(火) 09:19:22
[[解決]]
おはようございます。
お返事が遅くなりました。
皆さんレスありがとうございます。

>Array.push_back(SendData);
CArrayにpush_backというメソッドはないようですけど。
すみません。STLを試してみたりと色々やっていたので・・・
それはそれで別のエラーが出てしまいますね。

どうにも煩わしいようなので、
yoh2さんの別解のようにSTLを使うように
しようと思います。

typedef struct AAA_
{
  int      Check;
  vector<CString> vct_FileNames;
}AAA;

typedef struct BBB_
{
  int nIndex;
  AAA A_Data;
  AAA B_Data;
  AAA C_Data;
}BBB;

vector <BBB> ArrayBBB;
BBB bbb;

ArrayBBB.push_back(bbb);

こんな感じでしょうか。
取り合えずは上手くいってるようです。
お手数お掛けしてすみません。
ありがとうございました。m(__)m

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