Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конструкция @Obj.arr, или немного о Pointer 
:(
    Опции темы
DragonFire
Дата 9.12.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Вообщем есть у меня конструкция:
Код

type 
 TArr=array[0..2] of extended;
 TObj=object
    x,y,z:extended;
   private 
    function GetArr:TArr;
    procedure SetArr(Arr:TArr);
   public   
    property Arr:TArr read GetArr write SetArr;
 end;

...

function TObj.GetArr: TArr;
begin
  Result[0]:=X;
  Result[1]:=Y;
  Result[2]:=Z;
end;
procedure TObj.SetArr(Arr: TArr);
begin
  X:=Arr[0];
  Y:=Arr[1];
  Z:=Arr[2];
end;


Я пишу такой рабочий код:
Код

var A:TArr;
begin
 glNormal3fv(@A);

Но когда я пытаюсь сделать так, то выдает ошибку:
Код

var A:TObj;
begin
 glNormal3fv(@A.Arr);


И вся проблема в том что я не могу написать просто 
Код

TObj=object
    x,y,z:extended;
    Arr:TArr;

Потому что x,y,z и Arr дублируют друг друга... Как быть?


--------------------
PM MAIL ICQ   Вверх
bems
Дата 9.12.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(DragonFire @  9.12.2006,  19:04 Найти цитируемый пост)
(@A.Arr);
нельзя взять адрес свойства если для его чтения использована функция


Цитата(DragonFire @  9.12.2006,  19:04 Найти цитируемый пост)
Как быть? 
загонять значение свойства в промежуточную переменную перед вызовом функции.

Ну или сделать свойство типа "указатель на массив" и передавать функции его.


Это сообщение отредактировал(а) bems - 9.12.2006, 23:49


--------------------
Обижено школьников: 8
PM MAIL   Вверх
DragonFire
Дата 10.12.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Пытался сделать так:

Код

PArr=^TArr;
TArr=array[0..2] of extended;


и работать уже с Parr но ничего путного не вышло  smile 
Пишет что нельзя передавать константу туда, где ожидается пойнтер.


--------------------
PM MAIL ICQ   Вверх
Alexeis
Дата 10.12.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



DragonFire, нельзя работать напрямую со свойствами, нужно записать сначала адрес в промежуточную переменную и затем ее передать уже в функцию.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
DragonFire
Дата 10.12.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Через промежуточную переменную конечно все работает - в том то и вопрос, можно ли заставить его работать напрямую со свойством.
Я понял: ответ - нельзя.


--------------------
PM MAIL ICQ   Вверх
skyboy
Дата 10.12.2006, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



DragonFire, свойство - это не переменная. это механизм такой, который есть только во время кодирования. при компиляции разница между полями("нормальными" переменными в объекте) и свойствами проявляется в полной мере - это только во время кодирования они обрабатываются одинаковыми конструкциями.
PM MAIL   Вверх
DragonFire
Дата 10.12.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Ага я уже догнал...


--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3922 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.