ООП именно в среде FreePascal[Решено]

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Re: ООП именно в среде FreePascal

Сообщение Maxizar » 08.04.2011 23:45:59

1 - Скрины это круто, НО почему не нормального размера? можно было залить полноценные сюды: http://fastpic.ru/

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.


:oops: Вот пока писал, Уже подсказали :( :(
Вложения
1.zip
(4.54 КБ) Скачиваний: 370
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: ООП именно в среде FreePascal

Сообщение Иван Шихалев » 09.04.2011 00:10:35

[прог.2]Работает в Lazarus и не работет во FreePascal. В последнем ругается на слово class: identifier not found "class" (идентификатор "class" не найден).


Нужно включить режим компиляции {$MODE OBJFPC} или {$MODE DELPHI}. В Lazarus первый из них включается по умолчанию.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Пред.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru