CArray
typedef CArray<CPoint,CPoint> PointArr;
typedef CArray<PointArr,PointArr> PolygonArr;
Когда добавляю в него элемент
PointArr pa;
pa.Add(CPoint(1,1));
PolygonArr polArr;
polArr.Add(pa);
Появляется ошибка
error C2664: 'Add' : cannot convert parameter 1 from 'class CArray<class CPoint,class CPoint>' to 'class CArray<class CPoint,class CPoint>'
No copy constructor available for class 'CArray<class CPoint,class CPoint>'
Error executing cl.exe.
Не работает, выдаёт разные ошибка типа:
'CArray' : too few template arguments
syntax error : missing ',' before identifier 'PtArr'
и так далее.
Пробовал
typedef CArray<CPoint, CArray<CPoint>>PtArr; и
typedef CArray<CPoint,CArray<CPoint,CPoint>>PtArr;
Всё равно не получается.
Попробуй так
typedef CArray<CArray<CPoint>> PointArr;
Попробуй так
typedef CArray<CArray<CPoint>> PointArr;
Так тем более нельзя. Для шаблона CArray нужно два агрумента.
Я вроде нашёл решение.
typedef CArray<CPoint,CPoint>PtArr;
Нужно создать класс.
class CPoints
{
public:
int GetUpperBound(){return points.GetUpperBound();}
CPoint GetAt(int nIndex){points.GetAt(nIndex);}
void Add(CPoint pt){points.Add(pt);}
CPoints(){}
virtual ~CPoints(){}
CPoints& operator =(CPoints* pts);
protected:
PtArr points;
};
Перегрузить оператор =
CPoints& CPoints::operator =(CPoints* pts)
[COLOR="Lime"]// напрямую (CPoints pts) почему-то не получается
// приходиться передавать через указатель[/COLOR]{
points.RemoveAll();
for(int i = 0;i<=pts->GetUpperBound();i++)
{
points.Add(pts->GetAt(i));
}
return *this;
}
Теперь можно:
typedef CArray<CPoints,CPoints*> PolygonArr;