![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как правильно вставить декларацию процедуры? [D7, XP]
vegarulez © (2011-06-24 21:32:00)Привет всем мастерам.
Подскажите как правильно вставить кусок кода вот отсюда:
http://ruminatedrumblings.blogspot.com/2008/07/indy-and-https-post.html
для логирования idHttp
Я вставляю - компилятор ругается:
[Error] Main.pas(161): Declaration of 'LogReceivedData' differs from previous declaration
[Error] Main.pas(162): Declaration of 'LogSentData' differs from previous declaration
[Error] Main.pas(163): Declaration of 'LogStatus' differs from previous declaration
[Error] Main.pas(165): Declaration of 'LogWriteString' differs from previous declaration
[Error] Main.pas(171): Identifier redeclared: 'TlogFile.buildLogLine'
вставляю вот так:
Uses
...
type
TForm1 = class(TForm)
IdAntiFreeze1: TIdAntiFreeze;
Panel1: TPanel;
memoHTML: TMemo;
HTTP: TIdHTTP;
...........
procedure Button5Click(Sender: TObject);
private
bPostFile: Boolean;
ss:string;
public
end;
const
CR = #13;
LF = #10;
EOL = CR+LF;
xmlEOL = EOL;
type
// this is a descendant of TidLogFile, it will create a plain text file with
// information about the transfer session
TlogFile = class(TidLogFile)
protected
procedure LogReceivedData(const AText, AData: string); override;
procedure LogSentData(const AText, AData: string); override;
procedure LogStatus(const AText: string); override;
public
procedure LogWriteString(const AText: string); override;
class function buildLogLine(data, prefix: string) : string;
end;
// this ensures the output of error and debug logs are in the same format, regardless of source
class function TlogFile.buildLogLine(data, prefix: string) : string;
begin
data := StringReplace(data, EOL, RSLogEOL, [rfReplaceAll]);
data := StringReplace(data, CR, RSLogCR, [rfReplaceAll]);
data := StringReplace(data, LF, RSLogLF, [rfReplaceAll]);
result := FormatDateTime('yy/mm/dd hh:nn:ss', now) + ' ';
if (prefix <> '') then
result := result + prefix + ' ';
result := result + data + EOL;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
Подскажите что делаю не так?
Вроде нигде выше декларации процедур с таким именем не встречаются.
Вообщем нид хелп.
icWasya (2011-06-27 12:48:00) [1]> там уже есть описание таких методови процедур
А как именно тамони описаны?
vegarulez (2011-06-25 20:17:00) [2]Я понял в чём дело.
Дело в том что если я в uses объявляю IdLogFile то компилятор ругается - т.к. там уже есть описание таких методови процедур.
Если же в юзес не объявлять IdLogFile то тогда компилятор ругается на вот эту строку
TlogFile = class(TidLogFile)
говоря что компилятор не знает что такое TidLogFile
Undeclared identifier: 'TidLogFile'
Плохиш (2011-06-25 12:36:00) [3]Перекрывающий метод должен иметь точно такое же описание, что и перекрываемый.
vegarulez (2011-06-25 08:18:00) [4]Поставил ниже имплементации - всё равно ошибка таже ( компилятор также ругается.
Германн (2011-06-25 01:00:00) [5]
> Компилятор же на них ругается.
А на кого ему еще ругаться? На глупого программера, который запихнул в секцию interface помимо объявлений ещё и часть кода реализации?
Плохиш (2011-06-25 00:54:00) [6]
> vegarulez (24.06.11 23:40) [3]
> Почему они должны находится после implementation?
Потому что так написано в описании синтаксиса используемого языка программирования.
vegarulez (2011-06-24 23:40:00) [7]Так это же объявление процедур и класса. Компилятор же на них ругается. Почему они должны находится после implementation?
Loginov Dmitry (2011-06-24 23:36:00) [8]Часть реализации должна находиться ниже implementation.
vegarulez (2011-06-24 21:33:00) [9]а ну и ругается на этот код:
protected
procedure LogReceivedData(const AText, AData: string); override;
procedure LogSentData(const AText, AData: string); override;
procedure LogStatus(const AText: string); override;
public
procedure LogWriteString(const AText: string); override;
class function buildLogLine(data, prefix: string) : string;