お世話になります。環境は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 =' が、指定されたクラスに定義されていません。」
と表示されるのですが、どこをどう修正すれば
使えるようになるか解りません。どなたかご教授下さい。
VC6 SP6 XP2000 の環境で、上記コードを試したところ、
全角スペースがある他は、エラーが出ませんでしたが。
XP2000って何だよ orz...
XP Pro SP2のことです。
あ。すみません。
抜けてました。
定義だけだとうまくいきます。
SendDataに値を入れて、
Array.push_back(SendData);
とやるとこのラインでエラーが出ます。
>Array.push_back(SendData);
CArrayにpush_backというメソッドはないようですけど。
[MSDN]CArray
http://msdn2.microsoft.com/en-us/library/7y7b8fx3(VS.80).aspx
push_backは、C++テンプレートの関数のメゾットみたいですね。
今手元に実験できる環境がないので想像になりますが、
下リンクの内容が原因じゃありませんか?(バージョン違いのリンクですが)
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よ……
おはようございます。
お返事が遅くなりました。
皆さんレスありがとうございます。
>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