Перегрузка оператора индексирования
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Перегрузка оператора индексирования Expand / Collapse
Автор
Сообщение
27.05.2007 23:03


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 19.09.2007 1:55
Сообщ.: 97, Visits: 1 021
Что-то не выходит каменный цветок. Определение класса:

struct TEventData {
 char strComputerName[128];
};
class TEventDataSet
{
private:
 int iCurrentRecordNo;  //текущая запись
 TEventData* Buffer[]; //буфер
public:
 int iRecordCount;   //количество записей
 TEventData* CurrentRecord;  //структура новой записи для заполнения
 TEventData& __fastcall operator [](const int idx);  //пытаюсь перегрузить оператор индексирования
 void __fastcall AppendRecord();
};

И вот реализация перегрузки:

TEventData& __fastcall TEventDataSet::operator [](const int idx)
{
 if ((idx >= 0) && (idx <= iRecordCount))
 {
  iCurrentRecordNo = idx;
  CurrentRecord = Buffer[iCurrentRecordNo];
  return *(TEventData*)CurrentRecord;
 }
 return (*(TEventData*)Buffer[0]);
}

Подозреваю, что могу быть сильно далёк от правильного написания кода, ибо не занимался этим уже несколько лет. При вызове этой писанины путём

TEventDataSet EventData;
EventData.AppendRecord();
EventData[0]->strComputerName = "pipec";

Возникает ошибка

E2288 Pointer to structure required on left side of -> or ->*

В чём загвоздка?

Сообщ. #913670
31.05.2007 12:17


Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 30.06.2007 8:03
Сообщ.: 28, Visits: 42
не знаю пока насчет ошибки 2288, но в строке
EventData[0]->strComputerName = "pipec";
точно еще одна ошибка. для массива char применяется strcpy и подобное, а не простое присваивание...

и к ошибке 2288:
может стоит просто вместо структуры в класс запихать указатель на AnsiString-строки?
Сообщ. #913784
31.05.2007 23:41


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 19.09.2007 1:55
Сообщ.: 97, Visits: 1 021
genok (31.05.2007)
не знаю пока насчет ошибки 2288, но в строке
EventData[0]->strComputerName = "pipec";
точно еще одна ошибка. для массива char применяется strcpy и подобное, а не простое присваивание...

Да я это тогда же поправил. Привык работать с AnsiString.
genok (31.05.2007)и к ошибке 2288:
может стоит просто вместо структуры в класс запихать указатель на AnsiString-строки?
Смысл в чём. Мне нужно обслуживать "очередь событий" - массив элементов типа структура. Т.е. сторонний софт может добавлять элементы в конец массива, а мне надо соотв-нно обрабатывать элементы с начала массива, удаляя их после обработки и сдвигая все последующие вперёд.

Т.е. нечто типа стека FIFO. Вот для обслуживания это стека я и попробовал написать класс. Может можно сделать как-то проще?

Сообщ. #913802
02.06.2007 16:25


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 19.09.2007 1:55
Сообщ.: 97, Visits: 1 021
Сделал. Задача снята.
Сообщ. #913818
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 5:37