2012-06-26 3 views
0

Мне нужна помощь; Я помогаю порту друзей, приложение Delphi построено лет назад для более новых версий Windows, поскольку в настоящее время оно работает только в Windows 95.delphi E2003 необъявленный идентификатор 'self'

В коде используются сторонние библиотеки из Woll2Woll для операций с БД.

Одна из этих библиотек генерирует ошибку E2003 Необъявленный идентификатор: «self».

Я прошел через несколько сайтов через Google и с ограниченным знанием о Delphi (из-за моего обучения Pascal около 12 лет назад и экстраполяции моих слегка ржавых навыков программирования PHP, BASH, ColdFusion и ASP) вы столкнулись с кирпичной стеной - я привязан ко времени и не могу понять информацию, которую я просматриваю в Интернете.

Проблемный сегмент кода из файла wwwQuery.pas и выглядит следующим образом:

{$ifdef wwDelphi3Up} 
    procedure TwwQuery.OpenCursor(InfoQuery: Boolean); 
    {$else} 
    procedure TwwQuery.OpenCursor; 
    {$endif} 
    begin 
     {$ifdef wwDelphi3Up} 
     inherited OpenCursor(InfoQuery); 
     {$else} 
     inherited OpenCursor; 
     {$endif} 
     //Modded by Arie 
     //wwSaveAnswerTable(self, Handle, FAnswerTable); 
     wwSaveAnswerTable(self, Handle, 'FAnswerTable'); 
    end; 

Точные сообщения об ошибках:

[DCC Error] wwQuery.pas(243): E2003 Undeclared identifier: 'self' 
[DCC Error] wwQuery.pas(244): E2029 '.' expected but ';' found 
[DCC Fatal Error] wwcommon.pas(285): F2063 Could not compile used unit 'wwQuery.pas' 

линия 243 является второй последней строке, чуть выше конец;

wwSaveAnswerTable функция выглядит следующим образом:

Function wwSaveAnswerTable(ADataSet: TDBDataSet; AHandle: HDbiCur; tableName: string): boolean; 

Что я должен изменить параметр автоспуска на, чтобы остановить ошибку компиляции?

Спасибо стек.

+3

Это не ваш реальный код. Если вам нужна помощь, не отправляйте фальшивый код. –

+0

Я согласен с Дэвидом. В любом случае 'begin' открывает новый блок, поэтому компилятор никоим образом не ожидает, что' end' будет последним в файле, потому что это потребует закрытия всех блоков. – Chris

ответ

2

Проблема связана с компилятором define wwDelphi3Up или любым связанным кодом.

Как вы видите следующее сообщение об ошибке: [DCC Error] wwQuery.pas (244): E2029 '.' ожидаемый, но ';' найдено

Компилятор ожидает завершения программы и строки wwSaveAnswerTable (self, Handle, 'FAnswerTable'); не компилируются внутри метода OpenCursor. Вот почему «Я» не определяется.

Вам не нужно изменять параметр, потому что это наверняка повлияет на функциональность.

Попробуйте скомпилировать его без определяет, если вы не использовать древнюю версию Delphi:

procedure TwwQuery.OpenCursor(InfoQuery: Boolean); 
begin 
    inherited OpenCursor(InfoQuery); 
    wwSaveAnswerTable(self, Handle, 'FAnswerTable'); // Here prob FAnswerTable without quotes 
end; 
+0

Привет, Marcodor, это приводит к примерно 6 ошибкам компиляции, если я обновляю код до вашего предложения. –

+0

Проблема находится где-то в вашем коде. Я вижу, что вы цитировали FAnswerTable, которые подсказывают мне, что некоторые ошибки даже в определении класса. – Marcodor

+0

Привет, Маркодор. У меня были сторонние библиотеки, обновленные до последней версии, и исправления были исправлены. Спасибо за помощь, это помогло доказать, что код должен быть обновлен из исходного кода. –