Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Внизсвойство типа массив Найти похожие ветки
← →
mikeflat © (2004-04-25 21:22) [0]Ребята, как можно сделать свойство типа массив - чего-то он у меня все время ругается, когда пытаюсь записать или считать данные
← →
mikeflat © (2004-04-25 21:22) [0]Ребята, как можно сделать свойство типа массив - чего-то он у меня все время ругается, когда пытаюсь записать или считать данные
← →
DrPass © (2004-04-25 21:37) [1]Наверное, ты где-то допустил ошибку
← →
DrPass © (2004-04-25 21:37) [1]Наверное, ты где-то допустил ошибку
← →
Rouse_ © (2004-04-25 21:41) [2]> [1] DrPass © (25.04.04 21:37)
Я даже примерно знаю в какой строке :)
← →
Rouse_ © (2004-04-25 21:41) [2]> [1] DrPass © (25.04.04 21:37)
Я даже примерно знаю в какой строке :)
← →
Anatoly Podgoretsky © (2004-04-25 21:56) [3]Одназначно твоя вина.
← →
Anatoly Podgoretsky © (2004-04-25 21:56) [3]Одназначно твоя вина.
← →
evvcom © (2004-04-26 01:54) [4]Пора уже завести конференцию "Для телепатов"...
← →
evvcom © (2004-04-26 01:54) [4]Пора уже завести конференцию "Для телепатов"...
← →
Miwa © (2004-04-26 02:37) [5]Дайте угадаю. Есть класс типа TMyClass в котором нужно свойство PMyProperty: array[1..n]of sometype;. По-поему, это надо сделать так:
MyType: array[1..n]of othertype;
MyClass = TMyClass
PMyProperty: MyType;
end;
2 "плоский майк": я примерно угадал, что ты имел в виду?
Кстати, информация на будущее: постарайся точнее описывать проблему и приводить пару строчек, на которые ругается компилятор, а иначе долго тебе ждать здесь помощи. Ну, разве что у кого-то еще после пива будет настроение хорошее %о))).
← →
Miwa © (2004-04-26 02:37) [5]Дайте угадаю. Есть класс типа TMyClass в котором нужно свойство PMyProperty: array[1..n]of sometype;. По-поему, это надо сделать так:
MyType: array[1..n]of othertype;
MyClass = TMyClass
PMyProperty: MyType;
end;
2 "плоский майк": я примерно угадал, что ты имел в виду?
Кстати, информация на будущее: постарайся точнее описывать проблему и приводить пару строчек, на которые ругается компилятор, а иначе долго тебе ждать здесь помощи. Ну, разве что у кого-то еще после пива будет настроение хорошее %о))).
← →
Sun bittern © (2004-04-26 06:26) [6]mikeflat © (25.04.04 21:22)
На сайт Анатолия Подгоредского и качай Тейксера с Пачеко.
Miwa © (26.04.04 02:37) [5]
Интересная коснтрукция ;)
Для доступа к свойству типа массив, у класса для доступа к данному свойству должны быть отдельно реализованы методы типа SetMyArray/GetMyArray.
← →
Sun bittern © (2004-04-26 06:26) [6]mikeflat © (25.04.04 21:22)
На сайт Анатолия Подгоредского и качай Тейксера с Пачеко.
Miwa © (26.04.04 02:37) [5]
Интересная коснтрукция ;)
Для доступа к свойству типа массив, у класса для доступа к данному свойству должны быть отдельно реализованы методы типа SetMyArray/GetMyArray.
← →
Miwa © (2004-04-26 08:47) [7]2 Sun bittern © (26.04.04 06:26) [6]
>Для доступа к свойству типа массив, у класса для доступа к данному свойству должны быть отдельно реализованы
Не должны а рекомендуется.
← →
Miwa © (2004-04-26 08:47) [7]2 Sun bittern © (26.04.04 06:26) [6]
>Для доступа к свойству типа массив, у класса для доступа к данному свойству должны быть отдельно реализованы
Не должны а рекомендуется.
← →
Anatoly Podgoretsky © (2004-04-26 08:57) [8]И ты знаешь другие варианты, кроме методов доступа?
← →
Anatoly Podgoretsky © (2004-04-26 08:57) [8]И ты знаешь другие варианты, кроме методов доступа?
← →
mikeflat © (2004-04-26 10:47) [9]Мужики, делаю так:
PArray = ^TArray;
TArray = array [0..7] of integer;
TObj = class(TPersistent)
private
FArray: PArray;
...
function GetArray(Ind: integer): integer;
procedure SetArray(Ind: integer;Value: integer);
public
...
property AddressArray[Ind: integer]: integer read GetAddressArray write SetAddressArray;
...
end;
function TObj.GetArray(Ind: integer): integer;
begin
Result := FArray^[Ind];
end;
procedure TObj.SetArray(Ind: integer; Value: integer);
begin
FArray^[Ind] := Value;
end;
Где косяк - не могу понять?
← →
mikeflat © (2004-04-26 10:47) [9]Мужики, делаю так:
PArray = ^TArray;
TArray = array [0..7] of integer;
TObj = class(TPersistent)
private
FArray: PArray;
...
function GetArray(Ind: integer): integer;
procedure SetArray(Ind: integer;Value: integer);
public
...
property AddressArray[Ind: integer]: integer read GetAddressArray write SetAddressArray;
...
end;
function TObj.GetArray(Ind: integer): integer;
begin
Result := FArray^[Ind];
end;
procedure TObj.SetArray(Ind: integer; Value: integer);
begin
FArray^[Ind] := Value;
end;
Где косяк - не могу понять?
← →
Sun bittern © (2004-04-26 10:50) [10]>> PArray = ^TArray;
А почему указатель, а не просто массив?
← →
Sun bittern © (2004-04-26 10:50) [10]>> PArray = ^TArray;
А почему указатель, а не просто массив?
← →
VMcL © (2004-04-26 10:55) [11]>>mikeflat © (26.04.04 10:47) [9]
1. У тебя в коде нет определений GetAddressArray и SetAddressArray.
2. Текст сообщения об ошибке - это военная тайна?
← →
VMcL © (2004-04-26 10:55) [11]>>mikeflat © (26.04.04 10:47) [9]
1. У тебя в коде нет определений GetAddressArray и SetAddressArray.
2. Текст сообщения об ошибке - это военная тайна?
← →
Sun bittern © (2004-04-26 10:59) [12]TObj = class(TPersistent)
Где метод Assign? Данный класс TObj создан?
Точно задуманно TPersistent?
Moжет TPersistent заменить на TComponent?
← →
Sun bittern © (2004-04-26 10:59) [12]TObj = class(TPersistent)
Где метод Assign? Данный класс TObj создан?
Точно задуманно TPersistent?
Moжет TPersistent заменить на TComponent?
← →
mikeflat © (2004-04-26 11:02) [13]Класс создан все нормально, все остальные свойства работают - это нет. Указатель, а не массов потому что, тот тоже не работает - у пробовал повсякому. класс должен быть обязательно TPersistent
← →
mikeflat © (2004-04-26 11:02) [13]Класс создан все нормально, все остальные свойства работают - это нет. Указатель, а не массов потому что, тот тоже не работает - у пробовал повсякому. класс должен быть обязательно TPersistent
← →
mikeflat © (2004-04-26 11:03) [14]сообщение об ошибке - нарушение доступа по адресу ...
← →
mikeflat © (2004-04-26 11:03) [14]сообщение об ошибке - нарушение доступа по адресу ...
← →
Плохиш (2004-04-26 11:03) [15]>VMcL © (26.04.04 10:55) [11]
> 2. Текст сообщения об ошибке - это военная тайна?
Да это ж всем известно "Обращение в запрещённую область памяти" ;-)
>mikeflat © (26.04.04 10:47) [9]
FArray за тебя Пушкин должен создавать?
← →
Плохиш (2004-04-26 11:03) [15]>VMcL © (26.04.04 10:55) [11]
> 2. Текст сообщения об ошибке - это военная тайна?
Да это ж всем известно "Обращение в запрещённую область памяти" ;-)
>mikeflat © (26.04.04 10:47) [9]
FArray за тебя Пушкин должен создавать?
← →
Sun bittern © (2004-04-26 11:04) [16]Тогда
VMcL © (26.04.04 10:55) [11]
1.
← →
Sun bittern © (2004-04-26 11:04) [16]Тогда
VMcL © (26.04.04 10:55) [11]
1.
← →
Sun bittern © (2004-04-26 11:06) [17]>> FArray за тебя Пушкин должен создавать?
Можно подробнее ;)
← →
Sun bittern © (2004-04-26 11:06) [17]>> FArray за тебя Пушкин должен создавать?
Можно подробнее ;)
← →
evvcom © (2004-04-26 11:07) [18]
> PArray = ^TArray;
> TArray = array [0..7] of integer;
>
> TObj = class(TPersistent)
> private
> FArray: PArray;
А под переменную FArray место выделяешь? Это же указатель. Проще объявить FArray: TArray; - тогда выделять память не надо будет. Замечание VMcL © (26.04.04 10:55) [11] пропущено мимо ушей? А зря.
← →
evvcom © (2004-04-26 11:07) [18]
> PArray = ^TArray;
> TArray = array [0..7] of integer;
>
> TObj = class(TPersistent)
> private
> FArray: PArray;
А под переменную FArray место выделяешь? Это же указатель. Проще объявить FArray: TArray; - тогда выделять память не надо будет. Замечание VMcL © (26.04.04 10:55) [11] пропущено мимо ушей? А зря.
← →
evvcom © (2004-04-26 11:08) [19]Во, уже настрочили.
← →
evvcom © (2004-04-26 11:08) [19]Во, уже настрочили.
← →
Плохиш (2004-04-26 11:08) [20]
> Sun bittern © (26.04.04 11:06) [17]
> >> FArray за тебя Пушкин должен создавать?
> Можно подробнее ;)
Пушкин - это был такой русский известный поэт...
← →
Плохиш (2004-04-26 11:08) [20]
> Sun bittern © (26.04.04 11:06) [17]
> >> FArray за тебя Пушкин должен создавать?
> Можно подробнее ;)
Пушкин - это был такой русский известный поэт...
← →
mikeflat © (2004-04-26 11:21) [21]Ни хрена не дает это ваше выделение памяти - попробуйте сами!!!!
← →
mikeflat © (2004-04-26 11:21) [21]Ни хрена не дает это ваше выделение памяти - попробуйте сами!!!!
← →
Sun bittern © (2004-04-26 11:23) [22]mikeflat © (26.04.04 11:21) [21]
Выкладываей весь код :)
← →
Sun bittern © (2004-04-26 11:23) [22]mikeflat © (26.04.04 11:21) [21]
Выкладываей весь код :)
← →
mikeflat © (2004-04-26 11:27) [23]Да код-то я уже выложил, все остальное к этому отношения не имеет
← →
mikeflat © (2004-04-26 11:27) [23]Да код-то я уже выложил, все остальное к этому отношения не имеет
← →
VAleksey © (2004-04-26 11:30) [24]Может тебе нужен не массив а индексированное св-во наподобие
TStringList.Strings ?
...
Str := List.Strings[i];
...
← →
VAleksey © (2004-04-26 11:30) [24]Может тебе нужен не массив а индексированное св-во наподобие
TStringList.Strings ?
...
Str := List.Strings[i];
...
← →
mikeflat © (2004-04-26 11:33) [25]Конечно, это проще всего сделать, но, во-первых, нахрена мне строковый массив, если нужен integer, а во-вторых - это-то чего не работает?!!!
← →
mikeflat © (2004-04-26 11:33) [25]Конечно, это проще всего сделать, но, во-первых, нахрена мне строковый массив, если нужен integer, а во-вторых - это-то чего не работает?!!!
← →
Sun bittern © (2004-04-26 11:35) [26]Ну
VMcL © (26.04.04 10:55) [11]
1.
Я так и не увидел!!!
← →
Sun bittern © (2004-04-26 11:35) [26]Ну
VMcL © (26.04.04 10:55) [11]
1.
Я так и не увидел!!!
← →
evvcom © (2004-04-26 11:37) [27]
> Да код-то я уже выложил, все остальное к этому отношения
> не имеет
Да ни хрена ты не выложил! Сколько ошибок уже указали, исправил? Как исправил? Все должно работать, если исправил правильно. И как же выделение памяти, например, не имеет отношения к тому коду, который ты выложил раньше?
← →
evvcom © (2004-04-26 11:37) [27]
> Да код-то я уже выложил, все остальное к этому отношения
> не имеет
Да ни хрена ты не выложил! Сколько ошибок уже указали, исправил? Как исправил? Все должно работать, если исправил правильно. И как же выделение памяти, например, не имеет отношения к тому коду, который ты выложил раньше?
← →
Плохиш (2004-04-26 11:37) [28]mikeflat © (26.04.04 11:33) [25]
TObj = class(TPersistent)
private
FArray: PArray;
...
function GetArray(Ind: integer): integer;
procedure SetArray(Ind: integer;Value: integer);
public
...
property AddressArray[Ind: integer]: integer read GetAddressArray write SetAddressArray;
...
end;
function TObj.GetArray(Ind: integer): integer;
begin
Result := FArray^[Ind];
end;
Объясни-ка на пальцах, куда, при вызове GetArray, указывает твоя переменная FArray?
← →
Плохиш (2004-04-26 11:37) [28]mikeflat © (26.04.04 11:33) [25]
TObj = class(TPersistent)
private
FArray: PArray;
...
function GetArray(Ind: integer): integer;
procedure SetArray(Ind: integer;Value: integer);
public
...
property AddressArray[Ind: integer]: integer read GetAddressArray write SetAddressArray;
...
end;
function TObj.GetArray(Ind: integer): integer;
begin
Result := FArray^[Ind];
end;
Объясни-ка на пальцах, куда, при вызове GetArray, указывает твоя переменная FArray?
← →
mikeflat © (2004-04-26 11:45) [29]OK, еще раз:
PArray = ^TAddressArray;
TArray = array [0..7] of word;
TObj = class(TPersistent)
private
FArray: PArray;
...
function GetArray(Ind: integer): word;
procedure SetArray(Ind: integer; Value: word);
public
constructor Create;
destructor Destroy; override;
property Array[Ind: integer]: word read GetArray write SetArray;
...
end;
constructor TObj.Create;
begin
inherited Create;
GetMem(FArray,SizeOf(PArray));
end;
destructor TObj.Destroy;
begin
FreeMem(FArray);
inherited Destroy;
end;
function TObj.GetArray(Ind: integer): word;
begin
Result := FArray^[Ind];
end;
procedure TObj.SetArray(Ind: integer; Value: word);
begin
FArray^[Ind] := Value;
end;
procedure OneProcedure;
var Obj: TObj;
begin
Obj := TObj.Create;
Obj.Array[1] := 1;
end;
Please
← →
mikeflat © (2004-04-26 11:45) [29]OK, еще раз:
PArray = ^TAddressArray;
TArray = array [0..7] of word;
TObj = class(TPersistent)
private
FArray: PArray;
...
function GetArray(Ind: integer): word;
procedure SetArray(Ind: integer; Value: word);
public
constructor Create;
destructor Destroy; override;
property Array[Ind: integer]: word read GetArray write SetArray;
...
end;
constructor TObj.Create;
begin
inherited Create;
GetMem(FArray,SizeOf(PArray));
end;
destructor TObj.Destroy;
begin
FreeMem(FArray);
inherited Destroy;
end;
function TObj.GetArray(Ind: integer): word;
begin
Result := FArray^[Ind];
end;
procedure TObj.SetArray(Ind: integer; Value: word);
begin
FArray^[Ind] := Value;
end;
procedure OneProcedure;
var Obj: TObj;
begin
Obj := TObj.Create;
Obj.Array[1] := 1;
end;
Please
← →
evvcom © (2004-04-26 11:46) [30]+ как делаешь вызов этого [b]GetArray[/b]?
← →
evvcom © (2004-04-26 11:46) [30]+ как делаешь вызов этого [b]GetArray[/b]?
← →
evvcom © (2004-04-26 11:47) [31]
> OK, еще раз:
> PArray = ^TAddressArray;
What is TAddressArray?
← →
evvcom © (2004-04-26 11:47) [31]
> OK, еще раз:
> PArray = ^TAddressArray;
What is TAddressArray?
← →
Плохиш (2004-04-26 11:48) [32]
constructor TObj.Create;
begin
inherited Create;
GetMem(FArray,SizeOf(PArray));
end;
Тогда уж и писать надо SizeOf(TArray)
← →
Плохиш (2004-04-26 11:48) [32]
constructor TObj.Create;
begin
inherited Create;
GetMem(FArray,SizeOf(PArray));
end;
Тогда уж и писать надо SizeOf(TArray)
← →
evvcom © (2004-04-26 11:49) [33]
> GetMem(FArray,SizeOf(PArray));
SizeOf(PArray)=4, а SizeOf(TAddressArray) или SizeOf(TArray) гораздо больше.
← →
evvcom © (2004-04-26 11:49) [33]
> GetMem(FArray,SizeOf(PArray));
SizeOf(PArray)=4, а SizeOf(TAddressArray) или SizeOf(TArray) гораздо больше.
← →
Плохиш (2004-04-26 11:49) [34]>evvcom © (26.04.04 11:47) [31]
Опсс, А действительно?
← →
Плохиш (2004-04-26 11:49) [34]>evvcom © (26.04.04 11:47) [31]
Опсс, А действительно?
← →
evvcom © (2004-04-26 11:51) [35]Действительно! См. также Плохиш (26.04.04 11:48) [32], а лучше вообще убери указатели и выделение/удаление памяти.
← →
evvcom © (2004-04-26 11:51) [35]Действительно! См. также Плохиш (26.04.04 11:48) [32], а лучше вообще убери указатели и выделение/удаление памяти.
← →
evvcom © (2004-04-26 11:53) [36]Оппс...? Это оказывается сам Плохиш вопрос задал, на ник не глянул. Почему такой вопрос?
← →
evvcom © (2004-04-26 11:53) [36]Оппс...? Это оказывается сам Плохиш вопрос задал, на ник не глянул. Почему такой вопрос?
← →
Плохиш (2004-04-26 11:54) [37]>evvcom © (26.04.04 11:51) [35]
Опсс, А действительно? = What is TAddressArray?
;-)
← →
Плохиш (2004-04-26 11:54) [37]>evvcom © (26.04.04 11:51) [35]
Опсс, А действительно? = What is TAddressArray?
;-)
← →
evvcom © (2004-04-26 11:57) [38]
> Плохиш (26.04.04 11:54) [37]
> >evvcom © (26.04.04 11:51) [35]
> Опсс, А действительно? = What is TAddressArray?
> ;-)
Чего не понятно? Посмотри еще раз, какой код опять опубликован:
> OK, еще раз:
> PArray = ^[b]TAddressArray[/b];
> [b]TArray[/b] = array [0..7] of word;
И что это такое TAddressArray?
← →
evvcom © (2004-04-26 11:57) [38]
> Плохиш (26.04.04 11:54) [37]
> >evvcom © (26.04.04 11:51) [35]
> Опсс, А действительно? = What is TAddressArray?
> ;-)
Чего не понятно? Посмотри еще раз, какой код опять опубликован:
> OK, еще раз:
> PArray = ^[b]TAddressArray[/b];
> [b]TArray[/b] = array [0..7] of word;
И что это такое TAddressArray?
← →
mikeflat © (2004-04-26 11:58) [39]СПАСИБО, парни, вы настоящие друзья!
← →
mikeflat © (2004-04-26 11:58) [39]СПАСИБО, парни, вы настоящие друзья!
← →
Lord Warlock (2004-04-26 12:10) [40]я проверил код без всяких указателей, с TArray, работает безукоризненно, так и должно быть. Если ошибка вываливается на выходе из процедуры, в которой создаешь экземпляр TObj, значит не уничтожаешь этот экземпляр (Obj.Free). Если при попытке присвоить значение свойству, значит проблема в чем-то другом, тк твой код вполне рабочий, если из него выкинуть указатели.
← →
Lord Warlock (2004-04-26 12:10) [40]я проверил код без всяких указателей, с TArray, работает безукоризненно, так и должно быть. Если ошибка вываливается на выходе из процедуры, в которой создаешь экземпляр TObj, значит не уничтожаешь этот экземпляр (Obj.Free). Если при попытке присвоить значение свойству, значит проблема в чем-то другом, тк твой код вполне рабочий, если из него выкинуть указатели.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.046 c