Форум: "Прочее";
Текущий архив: 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.005 c