Показать сообщение отдельно
  #2  
Старый 02.04.2012, 17:14
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Если собрались использовать array of TCommandStackElement, то надо так
PCommandStackElmt = ^TCommandStackElmt; - выкинуть.

Код:
TCommandStack = class (TObject)
  private
    PCommandStack: TCommandStackElmt;//<<==-- здесь так
    Created: Boolean;  //проверка на "созданность"
    FSize: Cardinal;     //под сколько элементов уже выделено памяти
    FCount: Cardinal;  //количество занятых элементов

вместо
Код:
ReallocMem(PCommandStack,(FSize)*SizeOf(TCommandStackElement));
надо
Код:
SetLength(PCommandStack,FSize);

Убрать ^ при обращении к PCommandStack.

и что Вы хотели сделать здесь
Код:
      
      PCommandStack[Self.FCount].@Command:=@ICommand;
и особенно здесь
Код:
      
PCommandStack[Self.FCount].Command:=TCommand.create;
// сначала записываем в поле указатель на только что созданный класс
PCommandStack[Self.FCount].Command:=ICommand;
// а затем затираем его

Если Вы вот этим кодом @Command:=@ICommand; хотите побайтно скопировать содержимое объекта TCommand - то хочу разочаровать - ничего не выйдет.
И немножко ликбеза.
Экземпляры классов в дельфи - всегда указатели.
Копирующего конструктора и поэлементного присваивания по умолчанию для классов НЕТ !. Если они нужны - нужно делать самому. Для некоторых классов копирование содержимого имеется(например TStringList, TBitmap), но у этих классов есть метод Assign, в котором прописано - что и как копируется/присваивается.
Удачи.
Ответить с цитированием