Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.09;
Скачать: CL | DM;

Вниз

Помогите с указателями плз...   Найти похожие ветки 

 
DPOBOCEK   (2006-06-18 14:42) [0]

Тут код моего модуля. На одной строче выдаёт ошибку не могу понять почему. Ошибка на подчёркнутой строке.

type
 TStr = Class
       public
       FAdress:Pchar;
       FLen:byte;
       Fst1:string;
       Fst2:string;
       Constructor Create;
       Constructor create(st2:pchar);
       Constructor Create(newst1:Char);

       Function GetLen:byte;
       Procedure SetLen(NewLen:Byte);
       Function Getst1:string;
       Procedure SetSt1(NewSt1:string);
       Function Getst2:string;
       Procedure SetSt2(NewSt2:string);
       Procedure ClrStr;
      property Len : Byte read GetLen write SetLen;
      property St1 : string read GetSt1 write SetSt1;
      property St2 : String read GetSt2 write SetSt2;
     end;
implementation

function TStr.GetLen: Byte;
begin
 GetLen := FLen;
end;

procedure TStr.SetLen(NewLen : Byte);
begin
 FLen := NewLen;
end;

function TStr.GetSt1: String;
begin
 GetSt1 := FSt1;
end;

procedure TStr.SetSt1(NewSt1 : string);
begin
 FSt1 := NewSt1;
end;

function TStr.GetSt2: String;
begin
 GetSt2 := FSt2;
end;

procedure TStr.SetSt2(NewSt2 : string);
begin
 FSt2 := NewSt2;
end;

Constructor TStr.Create(st2:pchar);
begin
fadress:=st2;
flen:=length(fadress);
Fst1:=st2;
end;

Constructor TStr.Create(newst1:char);
begin
fst1:=newst1;
flen:=1;
FAdress:= @st1;
end;

constructor TStr.Create;
Begin
inherited Create;
end;

procedure TStr.ClrStr;
begin
Fst1:=" ";
Fst2:=" ";
Flen:=0;
Fadress:=nil;
end;

end.


 
Virgo_Style ©   (2006-06-18 15:07) [1]


> FAdress:= @st1;


В чем идея?


 
DPOBOCEK   (2006-06-18 15:19) [2]

В том что FAdress - указатель на строку ктороый должен хранить адресс динамически выделеной памяти для размещения символа строки.
Это не я придумываю, это мне РГЗ дали...


 
Virgo_Style ©   (2006-06-18 15:34) [3]

DPOBOCEK   (18.06.06 15:19) [2]
FAdress - указатель на строку


но ведь St1 - не строка


 
DPOBOCEK   (2006-06-18 16:17) [4]

Это поле-строка... она объявлена как стринг


 
Anton_K ©   (2006-06-18 16:24) [5]

Это не поле, а свойство.


 
DPOBOCEK   (2006-06-18 16:32) [6]

Я понял свою ошибку правильно было написать -
FAdress:= @Fst1;


 
DPOBOCEK   (2006-06-18 17:40) [7]

Тэкс другой вопрос... начал подключать модуль к форме и тут


var Sti: TStr;
...
sti:=TStr.create(Edit1.Text);


выдаёт ошибку типа несовпадение типов данный. Я это понимаю. И понимаю почему не совпадают. как это исправить? Это при условии что мне обязттельно нужно сохранить типы данных в классе TStr а зачитать и инициализровать строку можно из любого объекта. Мемо Эдит Инпут Бокс. Пробывал их менять та же ошибка.. чё делать?


 
Sergey Masloff   (2006-06-18 19:06) [8]

1) На кой фиг тебе акцессоры когда у тебя поля класса наружу?
2) Если понимаешь почему не совпадают в чем проблема? Устрани (понимаемую) причину - преобразуй типы или объяви еще один конструктор


 
DPOBOCEK   (2006-06-19 01:22) [9]

В том то и дело, что я ограничен условиями задания посталеного мне. Переменные менять нельзя, конструктор добавлять нельзя.. чё делать?
А аксцесор так, для понта. шоб нихера не напутталось, потому что мне сейчас по определённым условиям приходиться работать на лазарусе, а он такой конченый. это так на всяк.
впринципе вто условие, еси что чем помогите, можеть какие-то другие методы решения...

Описать базовый класс СТРОКА. Обязательные поля:
-Указатель на объект - хранит адресс динамической выделеной памяти для размещения символов строки.
-значение типа byte - хранит длину строки в байтах.
Методы:
-Конструктор без параметров
-Констрктор принимающий в качестве параметра строку(заканчивающуюся нулевым байтом)
-Констрктор принимающий в качестве параметра символ
-Получение длины строки
-Очистка строки


 
ЮЮ ©   (2006-06-19 03:42) [10]

-Констрктор принимающий в качестве параметра строку(заканчивающуюся нулевым байтом) Constructor TStr.Create(st2:pchar);

Тогда и вызывать надо соответственно:
не sti:=TStr.create(Edit1.Text);
a sti := TStr.create(PChar(Edit1.Text));

P.S.
 А для конструктора Create(st2:pchar) inherited не вызывается принципмально?
 параметром может быть и локальная строка, так что нет смысла запоминать адрес, а нужно выделять папять для значения и запоминать его, тем более, что в ТЗ так и сказано: Указатель на объект - хранит адресс динамической выделеной памяти для размещения символов строки.

property St1 : string read GetSt1 write SetSt1;
property St2 : String read GetSt2 write SetSt2;

- а это вообще какая-то самодеятельность

И, наконец, использование string в таком объекте - непозволительная роскошь, ибо что-то подобное string и должен представлять твой класс


 
DPOBOCEK ©   (2006-06-19 08:37) [11]


> property St1 : string read GetSt1 write SetSt1;
> property St2 : String read GetSt2 write SetSt2;
> - а это вообще какая-то самодеятельность

Почему?



Страницы: 1 вся ветка

Текущий архив: 2006.07.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
2-1150789701
Exile
2006-06-20 11:48
2006.07.09
может кто подскажет как решить проблему


2-1150540333
brus
2006-06-17 14:32
2006.07.09
Дата DataTimePicker


2-1151053682
elfebet
2006-06-23 13:08
2006.07.09
Не пойму ошибку и как выйти из ситуации.


1-1149017519
redlord
2006-05-30 23:31
2006.07.09
как узнать родителя окна по указателю


4-1143800767
Stanislav
2006-03-31 14:26
2006.07.09
Использование CreateThread