Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Классы и ошибки [D2005, XP]


TRSteep ©   (2008-04-10 10:30:00) 

Пытаюсь начать писать через классы

Определяю

...
type
 TLexeme = class
   public
     function IsSeparator( ch: string ): boolean;
 end;
type
 TLexeme = class
   public
     function IsSeparator( ch: string ): boolean;
 end;

....

function TLexeme.IsSeparator( ch: string ): boolean;
const
 z: array[1..9] of string = (' ', ';', ':', ',', '=', '<', '>', '-', '+' {, #13});
var
 i: integer;
begin
 Result := false;
 for i:= 1 to 9 do
 begin
   if ch = z[i] then
   begin
     Result := true;
     break;
   end;
 end;
end;

затем использую

if TLexeme.IsSeparator(cht) = true then //Find separator symbol
     begin


Ругаеться:

[Pascal Error] Unit1.pas(214): E2076 This form of method call only allowed for class methods
[Pascal Error] Unit1.pas(219): E2076 This form of method call only allowed for class methods


Kolan   (2008-04-10 14:13:00) [1]

> и я решил лучше перестраховываться

Не надо этого делать. :)


TRSteep   (2008-04-10 13:26:00) [2]

:-D
просто я без true делал - у меня не срабатывало (не помню уже в каком коде ) - и я решил лучше перестраховываться


{RASkov}   (2008-04-10 12:10:00) [3]

> а может побольше сравнений сделать?

И как нить еще и вдобавок так:
if (((TLexeme.IsSeparator(cht) = true) = true) = true) = true) =true and (((TLexeme.IsSeparator(cht) <> false) <> false) <> false) <> false) <> false then....
Уж здесь точно все будет так, как задумал "неуверенный" программист :) И то наверное будет сомневаться потом пол жизни...)


Palladin   (2008-04-10 12:02:00) [4]

потому что конструкция if ожидает логическго результата на входе, если TLexeme.IsSeparator(cht) его уже возвращает, зачем его еще и сравнивать с чем то?

результат (true = true) тоже true, почему бы тебе не написать

If (((TLexeme.IsSeparator(cht) = true) = true) = true) = true) =true

что бы точно быть увереным что TLexeme.IsSeparator(cht) true

а может побольше сравнений сделать?


Ega23   (2008-04-10 11:59:00) [5]


> только почему true не нужно?


потому что у тебя записано "Если истина равна истине"? Зачем, если можно написать "Если истина"?


TRSteep   (2008-04-10 11:57:00) [6]


> Kolan ©

Спасибо!!! Вы наверно хороший телепатор купили ;)
только почему true не нужно?


TRSteep   (2008-04-10 11:01:00) [7]


> кстати я не совсем понял, как это ты два класса одинакого
> назвал то...

2 раза скопировал - не заметил :)

> 1. function IsSeparator( ch: string ): boolean;Почему string?
>  Почему не char?

Возможно будут >=, <=, <>, :=... пока еще не совсем определился...

> а сколько нужно их создать до полного просветления? )

пару литров... сока


Kolan   (2008-04-10 10:45:00) [8]

> справку по теме «Class methods»

Имхо он незнал как правильно вызвать, вот и получился вызов как классового метода.

Автор делать надо так:

var
 Lexeme: TLexeme; //Объявили переменную.
begin
 Lexeme := TLexeme.Create; //Создали объект(экземпляр)
 try
   {Используем объект}
   if Lexeme.IsSeparator(cht) then // = true не нужно.
   begin
     ShowMessage('It works!');
   end;
 finally
   Lexeme.Free; //Удалили объект
 end;
end;


clickmaker   (2008-04-10 10:40:00) [9]


> о создании объектов до полного просветления

а сколько нужно их создать до полного просветления? )


Ega23   (2008-04-10 10:39:00) [10]

1. function IsSeparator( ch: string ): boolean;
Почему string? Почему не char?
Почему внутри метода z: array[1..9] of string, когда это явный array of char?
2. Если не хочешь создавать объект - "читаем раздел справки class methods до полного просветления".
3. Если тебе не нужен class method - читаем раздел справки о создании объектов до полного просветления.


Сергей М.   (2008-04-10 10:34:00) [11]

Правильно ругается.
см. справку по теме "Class methods"


Palladin   (2008-04-10 10:33:00) [12]

читаем раздел справки class methods до полного просветления
либо идем и читаем книжки для начинающих
кстати я не совсем понял, как это ты два класса одинакого назвал то...


Наверх

Титульная страница Поиск, карта сайта Написать письмо