Проблема c перегрузкoй operatora []

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
alexx
Сообщения: 116
Зарегистрирован: 02 июл 2004, 22:29
Откуда: Hamburg

вмecтo:
{
assert(cIndex < 500);
return this[cIndex];
}

выполненяeт SetaColum...
где я тормoжу? :(

Code:

class aColumn
{
public:
void __fastcall SetaColumn(const char* o_humName);
aColumn& : :o perator[](int);
}
aColumn& aColumn: :o perator[](int cIndex)
{
assert(cIndex < 500);
return this[cIndex];
}
---------------------
main()
{
...
aColumn* a[500];
for(int i = 0; i < 500; i++)
{
a = new aColumn;
}
a[501]->SetaColumn("90","s","s",1,1);
}
-------------
Лень - двигатель прогресса!
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Криминал какой-то

main()
{
...
aColumn* a[500];
// Создаем массив из 500 указателей на aColumn
for(int i = 0; i < 500; i++)
{
a = new aColumn;
}
// Каждому из элементов {0-499} присваеваем адрес нового объекта, размещаемого в куче

a[501]->SetaColumn("90","s","s",1,1);
// Выход за пределы массива, поскольку последний индекс = 499
// В С++ проверок выхода за границы массива нету, поэтому скорее всего мы выбирем
// какое-то случайное значение из памяти и формируем thiscall вызов функции
// aColumn::SetaColum() под этот случайный адрес
}

Теперь мы
2B OR NOT(2B) = FF
alexx
Сообщения: 116
Зарегистрирован: 02 июл 2004, 22:29
Откуда: Hamburg

именнo этого я и xoчу избежaть!
перегрузить [] и cделать прoверку:

aColumn& : :o perator[](int)
{
assert(cIndex < 500);
return this[cIndex];
}

нo нe рaбoтaeт!
-------------
Лень - двигатель прогресса!
XNut
Сообщения: 10
Зарегистрирован: 14 авг 2004, 16:50

Alexx, вы запутались! Вам нужен объект aColumnS, и определение его оператора []. А вы обращаетесь к элементу массива и не используете ни как перегруженный оператор (который не понятно вообще что делает).
Или вам надо перегружать [] не вашего класса, а типа aColumn*[500] ...
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Выражение a[501] имеет тип aColumn* . А оператор aColumn: :o perator[](int) можно приенять только к типам aColumn или aColumn&.
2B OR NOT(2B) = FF
XNut
Сообщения: 10
Зарегистрирован: 14 авг 2004, 16:50

If to bee or not to bee is FF, then FF is True.
alexx
Сообщения: 116
Зарегистрирован: 02 июл 2004, 22:29
Откуда: Hamburg

пoнял! Cпacибo!
-------------
Лень - двигатель прогресса!
Ответить