VC++で下記のような構造体を宣言したいのですが、ビルドすると、下記の<出力エラー>が出てしまいます。
CArrayの構造体のなかで、CArrayの変数を使用する事はできないのでしょうか?
ちなみに、CArray<char> data;をCByteArray data;としても同じようなエラーが出力されました。
struct ListData{
int index; // 登録番号
int cycle; // サイクル番号
CArray<char> data; // データ
};
CArray<ListData> m_ListData; // リストデータ
<出力エラー>
1>C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afxtempl.h(272) : error C2248: 'CObject::operator =' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。
1> C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h(554) : 'CObject::operator =' の宣言を確認してください。
1> C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afx.h(524) : 'CObject' の宣言を確認してください。
1> コンパイラでのこの診断により関数 'CArray<TYPE> &CArray<TYPE>::operator =(const CArray<TYPE> &)' が生成されました。
1> with
1> [
1> TYPE=char
1> ]
CArray(の親クラスCObject)には、コピーコンストラクタがなく、
praivateなoperator =()を暗黙に使おうとしているってエラーです。
解決方法としては、
(1) ListData構造体で、コピーコンストラクタや
publicなoperator =()を定義する。
(2) CArrayの派生クラス(MyArray)をつくり、
その中でコピーコンストラクタやpublicな
operator =()を定義し、ListData構造体で
MyArray<char> data;として使う。
のどちらかですね。
ご回答いただき、ありがとうございます。
(1)もしくは(2)の方法で検討してみたいと思います。
ツイート | ![]() |