![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Классы и ошибки [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 до полного просветления
либо идем и читаем книжки для начинающих
кстати я не совсем понял, как это ты два класса одинакого назвал то...