Здравствуйте, Kseniya, Вы писали:
K>Есть два типа
K>typedef CArray<int,int> LabLine;
K>typedef CArray<LabLine,LabLine&> LabTable;
K>Далее в функции объявлены:
K>LabLine lLine;
K>LabTable lTable;
K>На строчке:
K>lTable.Add(lLine);
K>вылетает ошибка:
K>e:\Microsoft Visual Studio .NET\Vc7\atlmfc\include\afxtempl.h(500): error C2582: 'operator =' function is unavailable in 'CArray<TYPE,ARG_TYPE>'
K> with
K> [
K> TYPE=int,
K> ARG_TYPE=int
K> ]
...
K>В чем проблема и как ее можно исправить?
Проблема в том что CArray<...> наследуеться от CObject, в котором запрещен оператор '=' и конструктор копирования. Соответственно и CArray<...> их тоже не имеет. Проблема проявляеться даже на более простом примере:
typedef CArray<int, int> LabLine;
int main()
{
LabLine lLine;
LabLine lLine0;
lLine = lLine0;
return 0;
}
Что посоветовать, не знаю, так как MS классы типа CArray не использую. Если
не нужна такая жесткая привязка к этим классам, то может просто попробовать STL.
#include <vector>
typedef std::vector<int> LabLine;
typedef std::vector<LabLine> LabTable;
int main()
{
LabLine lLine;
LabTable lTable;
lTable.push_back(lLine);
return 0;
}
Если нужна привязка, то может так (может нечто подобное есть в MS уже готовое, не знаю):
template<class T, class A = const T &>
class YourCArray: public CArray<T, A>
{
public:
YourCArray() {}
YourCArray(const YourCArray<T, A> &x) { Copy(x); }
YourCArray &operator=(const YourCArray<T, A> &x) { Copy(x); return *this; }
};
typedef YourCArray<int, int> LabLine;
typedef YourCArray<LabLine, LabLine &> LabTable;
int main()
{
LabLine lLine;
LabTable lTable;
lTable.Add(lLine);
return 0;
}