Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CArray

25K
18 марта 2007 года
ecologyst
4 / / 18.03.2007
Cоздаю массив CArray, каждый элементом которого - тоже массив, который состоит из объектов CPoint.

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.
309
19 марта 2007 года
el scorpio
1.1K / / 19.09.2006
typedef CArray<CPoint CArray<CPoint>> PointArr;
25K
20 марта 2007 года
ecologyst
4 / / 18.03.2007
typedef CArray<CPoint CArray<CPoint>> PointArr;
Не работает, выдаёт разные ошибка типа:

'CArray' : too few template arguments
syntax error : missing ',' before identifier 'PtArr'

и так далее.
Пробовал

typedef CArray<CPoint, CArray<CPoint>>PtArr; и
typedef CArray<CPoint,CArray<CPoint,CPoint>>PtArr;

Всё равно не получается.
309
20 марта 2007 года
el scorpio
1.1K / / 19.09.2006
Чуть-чуть неправильно copy-past сделал :(
Попробуй так
typedef CArray<CArray<CPoint>> PointArr;
25K
20 марта 2007 года
ecologyst
4 / / 18.03.2007
Цитата: el scorpio
Чуть-чуть неправильно copy-past сделал :(
Попробуй так
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;

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог