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.
 Вот пока писал, Уже подсказали
  Вот пока писал, Уже подсказали   
   



 
 