Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.29;
Скачать: CL | DM;

Вниз

Проблема с классом.   Найти похожие ветки 

 
PreDatoR   (2011-10-13 14:36) [0]

Вопрос простой.Проблема в том,что код у меня не компилируется.
type
TMyClass = class
x:integer;
s:string;
procedure show;
function hide;
end;
Если убрать procedure и function то компилируется.Интересно то, что в книгах для начинающих,написано подобное(методы),в статьях и в справочнике тоже.Почему все не работает?Как пользоваться property и методами?Если можно,то напишите простой пример.По разному пытался писать и всегда не получалось:(


 
Думкин ©   (2011-10-13 14:38) [1]


> Проблема в том,что код у меня не компилируется.

наверное даже ругается, в стиле - эй, у тебя ошибка в 17-й строке!


 
Медвежонок Пятачок ©   (2011-10-13 14:46) [2]

Интересно то, что в книгах для начинающих,написано .....

что у функции должен быть объявлен резалт?


 
Рамиль_   (2011-10-13 14:48) [3]

А так компилируется?

TMyClass =  class
x:integer;
s:string;
procedure show; virtual; abstarct;
function hide; virtual; abstarct;
end;


 
Ega23 ©   (2011-10-13 14:51) [4]


> function hide;


function должна возвращать результат.


 
Медвежонок Пятачок ©   (2011-10-13 14:51) [5]

это прокатило бы если бы у предка был бы скажем приватный hide, а он его переобъявил в паблике.
без указания резалта.


 
PreDatoR   (2011-10-13 14:54) [6]

Вот по книге
type
TMyObject = class(TObject)
MyField:Integer;
function MyMethod:Integer;
end;
Так и не понял как с этими методами работать.

> что у функции должен быть объявлен резалт?

А при чем здесь это?

> А так компилируется?

Тоже самое.


 
Ega23 ©   (2011-10-13 14:56) [7]


>  если бы у предка был бы скажем приватный hide, а он его
> переобъявил в паблике.


Разве? Вроде только с пропертями прокатывает

З.Ы. Проверил:


 TFoo = class
 public
   function Foo: Boolean;
 end;

 TBar = class (TFoo)
 public
   function Foo; // тут всяко изгалялся, и virtual и abstract и reintroduce;
 end;


[Error] Unit19.pas(18): E2023 Function needs result type


 
Медвежонок Пятачок ©   (2011-10-13 14:56) [8]

А при чем здесь это?

Если убрать procedure и function то компилируется.

Ну так убери.


 
Ega23 ©   (2011-10-13 14:57) [9]


> А при чем здесь это?
>


А при том. Замени function на procedure, либо тип результата объяви.


 
TUser ©   (2011-10-13 14:58) [10]

надо читать, какие он пишет сообщения об ошибках, - он их пишет для тебя, а не для просто так


 
Медвежонок Пятачок ©   (2011-10-13 14:58) [11]

// тут всяко изгалялся

Возможно это я перепутал с прямым углом.


 
Ega23 ©   (2011-10-13 15:01) [12]


> Возможно это я перепутал с прямым углом.


с property перепутал, там при повышении уровня видимости действительно ничего указывать не надо:

TFoo = class
private
 FFoo: Integer;
protected
 property Foo: Integer read FFoo write FFoo;
end;

TBar = class (TFoo)
published
 property Foo;
end;


Кстати, возможно и не при повышении уровня, а при выносе в published.


 
Jeer ©   (2011-10-13 15:05) [13]

Еще раз, если в теле implementation не определять процедуры и функции:

type TMyClass = class
   i: integer;
   s: string;
   procedure Hide; virtual; abstract;
   function Show: boolean; virtual; abstract;
 end;

*****************************************
Либо

type TMyClass = class
   i: integer;
   s: string;
   procedure Hide;
   function Show: boolean;
 end;

implementation

procedure TMyClass.Hide;
begin
//
end;

function TMyClass.Show: boolean;
begin
//
end;


 
Медвежонок Пятачок ©   (2011-10-13 15:08) [14]

> А так компилируется?

Тоже самое.


Походу там банально нарушена структура модуля. Ибо это должно было компилиться.


 
Медвежонок Пятачок ©   (2011-10-13 15:10) [15]

.... с другого боку
Если убрать procedure и function то компилируется.

походу он банально врет.


 
OW ©   (2011-10-13 15:14) [16]

после стандартного

type
 TForm1 = class(TForm)
 private     { Private declarations }
 public      { Public declarations }
 end;

напишите предложенное книгой и нажмите ctrl+shift+c

TMyObject = class(TObject)
MyField:Integer;
function MyMethod:Integer;
end;

должно добавится после
implementation
{$R *.dfm}

запись

{ TMyObject }
function TMyObject.MyMethod: Integer;
begin

end;

нет такого?


 
PreDatoR   (2011-10-13 15:33) [17]


> Jeer

Если написать в разделе implementation то первый код пашет а второй ну что то не получается:)

> нет такого?

Честно говоря я не вник куда писать это.
TMyObject = class(TObject)
MyField:Integer;
function MyMethod:Integer;
end;
и перед классом разве не надо type написать?


 
OW ©   (2011-10-13 15:35) [18]

type
TForm1 = class(TForm)
private     { Private declarations }
public      { Public declarations }
end;

// и перед классом разве не надо type написать?
// Уже написано,
// type  
//   TForm1 = class(TForm) и т.п.
// но если хочется, напиши еще раз

TMyObject = class(TObject)
MyField:Integer;
function MyMethod:Integer;
end;


 
картман ©   (2011-10-13 15:39) [19]

автор пьян и издевается


 
OW ©   (2011-10-13 15:43) [20]

в картинках
http://zalil.ru/31861572


 
Inovet ©   (2011-10-13 15:44) [21]

> [19] картман ©   (13.10.11 15:39)
> автор пьян и издевается

И сообщения об ошибках не может прочитать - в глазах двоится.


 
OW ©   (2011-10-13 15:44) [22]


> автор пьян и издевается

может, учится?
как сложно порой начать, когда не знаешь куда сделать первый шаг


 
Медвежонок Пятачок ©   (2011-10-13 15:56) [23]

может, учится?

на партизана-разведчика, не открывающего фошыстам тайну золотого ключика.


 
PreDatoR   (2011-10-13 15:59) [24]


> автор пьян и издевается

Я знал что пойдут такие насмешки.Это нормально.Как бы объяснить.В шахматах,если я сделаю ошибку,игра продолжится.Но в программировании все по правилам.Одна ошибка и не компилируется.Блин сколько времени бывает уходит,на понимание каких либо вещей.Надо как то разобраться с темой методы.Скажите пожалуйста здесь кто нибудь есть из самоучек?


 
Омлет ©   (2011-10-13 16:01) [25]

> Но в программировании все по правилам.

В общении на форуме тоже есть правила.
Если ты говоришь, что не компилируется, будь добр приведи сообщение об ошибке, которое выдает компилятор. А иначе - ты мерзкий партизан.

> Скажите пожалуйста здесь кто нибудь есть из самоучек?

Есть.


 
Плохиш ©   (2011-10-13 16:06) [26]


> PreDatoR   (13.10.11 15:59) [24]


> Одна ошибка и не компилируется.Блин сколько времени бывает
> уходит,на понимание каких либо вещей.

Забей, не твоё это.


 
Ega23 ©   (2011-10-13 16:10) [27]


> .Надо как то разобраться с темой методы.


1. Создаёшь новый проект (с формой). В моём случае - TForm22
2. На форму кидаешь кнопку
3. На кнопке кликаешь 2 раза.
4. Потом переносишь туда такой код (у меня это выглядит так):

unit Unit22;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TMyObject = class
   x: Integer;
   s: string;
   procedure Show;
   function Hide: string;
 end;

 TForm22 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form22: TForm22;

implementation

{$R *.dfm}

{ TMyObject }

function TMyObject.Hide: string;
begin
 Result := s;
end;

procedure TMyObject.Show;
begin
 ShowMessage(IntToStr(x) + " " + s);
end;

procedure TForm22.Button1Click(Sender: TObject);
var
 obj: TMyObject;
begin
 obj := TMyObject.Create;
 try
   obj.s := "Bla-Bla-Bla";
   obj.x := 10;
   obj.Show;
   ShowMessage(obj.Hide);
 finally
   obj.Free;
 end;
end;

end.


5. Запускаешь программу, нажимаешь кнопку.


 
PreDatoR   (2011-10-13 16:12) [28]


> В общении на форуме тоже есть правила.
> Если ты говоришь, что не компилируется, будь добр приведи
> сообщение об ошибке, которое выдает компилятор. А иначе
> - ты мерзкий партизан.

Да правильно.Про ошибку забыл указать.Вот в этом коде
type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
type
Tmyclass = class
Function MyFunc(aPar;Integer):Integer;
Procedure MyProc;
end;
Такие ошибки
Missing parametr type
Unsatisfied forward or external declaration "Tmyclass.MyProg"
Что я не так сделал.Или если
type
 TForm1 = class(TForm)
 end;
Tmyclass = class
Function MyFunc(aPar;Integer):Integer;
Procedure MyProc;

 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

end.
То теже две ошибки.В книгах не написано куда что...


 
Ega23 ©   (2011-10-13 16:16) [29]


> .В книгах не написано куда что...


Всё там написано.

В секции interface объявляются описания сущностей, которые будут "видны" из другого юнита.
В секции implementation объявляются описания сущностей, которые будут "видны" строго из этого юнита, а также реализация процедур, функций и методов.


 
Омлет ©   (2011-10-13 16:24) [30]

> PreDatoR   (13.10.11 16:12) [28]
> Missing parametr type

Ты вместо двоеточия поставил точку с запятой (aPar;Integer). Компилятор же даже строку подсвечивает и каретку ставит в место ошибки.

> Unsatisfied forward or external declaration "Tmyclass.MyProg"

Кроме описания метода класса надо реализовать этот метод, он же у тебя не абстрактный.

Пф.. Читай книги не по диагонали.


 
OW ©   (2011-10-13 16:37) [31]

картинку не глядел?

> http://zalil.ru/31861572


не работает?


 
хаха   (2011-10-13 16:40) [32]


> в картинках
D7, я вчера xe2 с дуру скачал, благо сразу потёр.. сейчас забыл, уже нормально.. ;)


 
Anatoly Podgoretsky ©   (2011-10-13 16:45) [33]

> PreDatoR  (13.10.2011 14:36:00)  [0]

Когда не компилируется, то пишет почему.


 
PreDatoR.   (2011-10-13 16:50) [34]


> Ega23

В виде текста да.Примеров мало.

>  [27]

За пример спс.Код понятен но опять что то не получается вот с этим куском который после uses.
type
TMyObject = class
  x: Integer;
  s: string;
  procedure Show;
  function Hide: string;
end;
> Плохиш
> Забей, не твоё это.

Не собираюсь бросать.Если из-за каких либо мелких проблем бросать специальность,так ни в чем спецом и не станешь.

> Омлет
> Пф.. Читай книги не по диагонали.

Хорошо:)

> Ты вместо двоеточия поставил точку с запятой (aPar;Integer

Не заметил это:)С книги скопировал.Извиняюсь за невнимательность,просто уже полустал немного вот и ошибаюсь.Исправил это и все равно ошибка.
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
 end;
Tmyclass = class
Function MyFunc(aPar:Integer):Integer;
Procedure MyProc;
 private
   { Private declarations }
 public
   { Public declarations }
 end;
Вот ошибки.
Unsatisfied forward or external declaration:"Tmyclass.MyFunc"
Unsatisfied forward or external declaration:"Tmyclass.MyProg"
Я по разному писал,и с end и без end...


 
PreDatoR.   (2011-10-13 16:54) [35]


> Anatoly Podgoretsky
>  Когда не компилируется, то пишет почему

Это да,но я не всегда знаю как исправить.


 
Юрий Зотов ©   (2011-10-13 17:02) [36]


> PreDatoR.   (13.10.11 16:50) [34]

> Unsatisfied forward or external declaration:"Tmyclass.MyFunc"
> Unsatisfied forward or external declaration:"Tmyclass.MyProg"

Методы MyFunc и MyProg объявлены в классе Tmyclass, но в секции implementation нет их реализации. А она должна быть, поскольку эти методы объявлены НЕабстрактными.


 
Inovet ©   (2011-10-13 17:04) [37]

> [24] PreDatoR   (13.10.11 15:59)
> Скажите пожалуйста здесь кто нибудь есть из самоучек?

Имхо, большинство.


 
OW ©   (2011-10-13 17:44) [38]

похоже, все-таки одно из

> Забей, не твоё это.


> автор пьян и издевается


 
Inovet ©   (2011-10-13 17:51) [39]

> [28] PreDatoR   (13.10.11 16:12)
> То теже две ошибки.

Тебе уже сколько раз говорили в разных формах - сообщения об ошибках надо читать, а не "компилятор даёт ошибку" он объясняет тебе что и где не так и не такими словами, как ты сюда постишь от себя.


 
RWolf ©   (2011-10-13 17:57) [40]


> Inovet ©   (13.10.11 17:51) [39]

чтобы понимать сообщения об ошибках, надо владеть терминологией предметной области, а для этого нужно ознакомиться с учебниками.



Страницы: 1 2 вся ветка

Текущий архив: 2012.01.29;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.009 c
3-1270789890
12
2010-04-09 09:11
2012.01.29
Запрос работает из Management Studio. Из программы нет.


1-1282814003
RG
2010-08-26 13:13
2012.01.29
как в сообщение(ShowMessage) вставить список свозможнотью выбора


2-1318992459
Gu
2011-10-19 06:47
2012.01.29
добавить время


4-1254322800
ackii
2009-09-30 19:00
2012.01.29
помогите разобраться с WH_DEBUG


4-1253608495
QAZ
2009-09-22 12:34
2012.01.29
Меню