Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с указателями плз...


DPOBOCEK ©   (2006-06-18 14:42:00) 

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

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.


DPOBOCEK   (2006-06-19 08:37:00) [1]


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

Почему?


ЮЮ   (2006-06-19 03:42:00) [2]

-Констрктор принимающий в качестве параметра строку(заканчивающуюся нулевым байтом) 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 01:22:00) [3]

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

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


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

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


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

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


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


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


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

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


Anton_K   (2006-06-18 16:24:00) [7]

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


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

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


Virgo_Style   (2006-06-18 15:34:00) [9]

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


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


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

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


Virgo_Style   (2006-06-18 15:07:00) [11]


> FAdress:= @st1;


В чем идея?


Наверх

Титульная страница Поиск, карта сайта Написать письмо