Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
15-1149938804
Vudu
2006-06-10 15:26
2006.07.09
Как оценивать труд программиста?


2-1150330349
Призрак
2006-06-15 04:12
2006.07.09
Передать THandle в поток


6-1141464906
MegaWolf510
2006-03-04 12:35
2006.07.09
Проблема с отправкой смс сообщений через com. Помогите, плиз...


15-1149836731
0bsid
2006-06-09 11:05
2006.07.09
PocketPC


1-1148860928
Gamer
2006-05-29 04:02
2006.07.09
Прорблема с прорисовкой прокрутки ScrollBox a в WinXP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский