Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.004 c
15-1318144980
clocker
2011-10-09 11:23
2012.01.29
Определить измененое поле


2-1319188793
igorium
2011-10-21 13:19
2012.01.29
Как рисовать на канве картинки, которая не помещается на экран?


2-1319387079
Анна
2011-10-23 20:24
2012.01.29
срочна нужна помощь в написании прогррамм...


2-1318634868
Romancaw
2011-10-15 03:27
2012.01.29
Как при помощи Sendinput отправить текст из tEdit?


15-1318097571
Born Loser
2011-10-08 22:12
2012.01.29
Как передать данные из драйвера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский