2 - Скрины конечно хорошо, но было лучше бы если Вы привели бы код в тэгах [сode][/code] Это позволило нам, если мы хотим вам помочь, не переписывать возможный код с ваших скринов или писать самим что то подобное (ведь подумайте оно нам надо? .. прально нет) а мы бы с легкостью скопипастили ваши куски кода себе и попытались разобраться где и че Вы напутали. Так что так как вы все же новичок, для вас сделаю скидку, но на будущее Код приводите в тэгах, а не на скринах ОК?... Вот я бы ответил вам в 10 раз быстрее еслиб мог скопировать код себе в Лазарус, а не пырится на скрины с низким разрешением….
3 - Где и в какой книге вы прочитали, что нужно писать код таким вот образом:
- Код: Выделить всё
begin Writeln(a); Writeln(b); end;
Нужно писать так:
- Код: Выделить всё
begin
Writeln(a);
Writeln(b);
end;
И это не моя прихоть поверьте.
Теперь по делу:
Вам же Компилятор подсказывает и Вы как я понимаю понимаете его (судя по переводу) Но так в чем дело то?
Если раскомментировать строку obj.print, то выдается ошибка Illegal qualifier (неправильный спецификатор) - и в Lazarus и во FreePascal.
Вы значит обьявили переменную как указатель и все такое.. так какого Х…
Вы делаете так:
- Код: Выделить всё
Obj.Print;
Вместо того чтобы делать так:
- Код: Выделить всё
Obj^.Print;
Появился значок ^
Obj – Это указатель а не Объект,Вы же сами объявили переменную как УКАЗАТЕЛЬ, а вы обращаетесь к нему как к объекту?? Почему? плохо значит прочитали раздел Указатели, еще разок повторите…
Нужно указатель разименовать и лишь потом что то там делать…
Вторая проблема: Вы же сами задали конкретный вопрос, переведя лишь подсказку компилятора. В ней даже ответ есть… Вызов должен быть сопровожден вызовом деструктора… А где он???? Вы его создали? Нет…
Выже работаете с чем? Объектом типа Object а не типа class Это для классов есть Деструктор от предка (TObject). Мы его наследуем не явно… Я же писал что Object это запись, которая может использовать навороты.. И изначально это всего лишь запись и все… Object ни от кого не наследуется… Может в дальнейшем но сразу (первоночально)НЕТ. А вот Класс всегда первоначально наследуется (неявно) от (TObject). Всегда…
Ну а последнее ой даже хз всего исходника не видно, из-за скринов… зачем вы их вообще делали….
Ниже привожу код консольного приложения в котором все работает, для не верующих прикладываю исходники..
- Код: Выделить всё
program project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes,SysUtils
{ you can add units after this };
{$R *.res}
type
{ MyObj }
MyObj = class
a,b :byte;
Function Print:String;
constructor Create(a1,b1:Byte);
end;
{ MyObj }
function MyObj.Print: String;
begin
Result:=IntToStr(a)+' '+IntToStr(b);
end;
constructor MyObj.Create(a1, b1: Byte);
begin
a:=a1;
b:=b1;
end;
var m:MyObj;
begin
m:=MyObj.Create(1,5);
writeln(m.Print);
m.Free;
readln;
end.
Вот пока писал, Уже подсказали