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

Вниз

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

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

Наверх




Память: 0.47 MB
Время: 0.008 c
2-1208157323
arinyshka
2008-04-14 11:15
2008.05.11
Определить источник события


2-1207839420
Vanis
2008-04-10 18:57
2008.05.11
Отрисовка картинок


2-1207825889
azamatufa
2008-04-10 15:11
2008.05.11
ADO master-detail: почему нельзя detail у сказать Append?


15-1206724373
tesseract
2008-03-28 20:12
2008.05.11
Быстрый tiling


8-1179150403
Moritron
2007-05-14 17:46
2008.05.11
DSPack - видеоналожение.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский