Форум: "Начинающим";
Текущий архив: 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