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

Вниз

Классы и ошибки   Найти похожие ветки 

 
TRSteep ©   (2008-04-10 10:30) [0]

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

Определяю

...
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


 
Palladin ©   (2008-04-10 10:33) [1]

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


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

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


 
Ega23 ©   (2008-04-10 10:39) [3]

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


 
clickmaker ©   (2008-04-10 10:40) [4]


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

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


 
Kolan ©   (2008-04-10 10:45) [5]

> справку по теме &laquo;Class methods&raquo;

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

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

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


 
TRSteep ©   (2008-04-10 11:01) [6]


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

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

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

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

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

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


 
TRSteep ©   (2008-04-10 11:57) [7]


> Kolan ©

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


 
Ega23 ©   (2008-04-10 11:59) [8]


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


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


 
Palladin ©   (2008-04-10 12:02) [9]

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

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

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

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

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


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

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

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


 
TRSteep ©   (2008-04-10 13:26) [11]

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


 
Kolan ©   (2008-04-10 14:13) [12]

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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1206469141
@!!ex
2008-03-25 21:19
2008.05.11
оцените пожалуйста код


8-1179149657
Elliner
2007-05-14 17:34
2008.05.11
Взаимодействие с программой через веб интерфейс


15-1206604337
operator
2008-03-27 10:52
2008.05.11
Автоматическая генерация диаграммы классов и типов.


2-1207770561
Polar
2008-04-09 23:49
2008.05.11
MessageDlg на русский язык


2-1208190577
Shifr
2008-04-14 20:29
2008.05.11
Помогите с заданием