Re: Проблема с СArray (при попытке создать массив массивов
От: comer США http://getboost.codeplex.com/
Дата: 26.09.03 00:39
Оценка:
Здравствуйте, 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;
}
getboost.codeplex.com
citylizard.codeplex.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.