Форум: "Начинающим";
Текущий архив: 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]> справку по теме «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;
← →
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