2015-05-09 4 views
2

У меня очень странная проблема, возникающая в среде разработки Delphi XE2.Delphi - E2003 Необъявленный идентификатор Проблема

В одном пакете, я следующие классы объявлены:

TCommandInfo = class 
    private 
     fParameters : TCommandParameters; 
     // other fields... 
    public 
     property Parameters : TCommandParameters read fParameters; 
     // other properties... 
end; 

TReceiveCommand = class(TCommand) 
    // other fields and properties 
    private 
     fInfo : TCommandInfo; 

    public 
     property Info : TCommandInfo read fInfo; 

end; 


TReceiveErrorCommand = class(TReceiveCommand); 

TReceiveDataCommand = class(TReceiveCommand) 
    // procedures and properties defined, etc. 
end; 

Теперь в совершенно другой пакет, который зависит от пакета выше, я эту функцию:

procedure DoDataCommand; 
var 
    cmd : TReceiveDataCommand; 
    success : Boolean; 
    params : TCommandParameters; 
begin 
    cmd := TReceiveDataCommand.Create; 
    success := cmd.Initialize; 

    if success then begin 
     // #### ERROR HERE #### 
     params := cmd.Info.Parameters; 
    end; 
end; 

Я «Я вижу, что при попытке скомпилировать зависимый пакет, я получаю ошибку E2003 с сообщением« Undeclared identifier: «Info» », и когда я CTRL + CLICK на TReceiveDataCommand беру меня в объявление, среда IDE перескакивает в другое место в исходном файле содержащих пакетов.

У меня есть тот же самый код, который работает на моей машине на работе, и это работает в обязательном порядке. Мне интересно, есть ли какие-то затяжные BPL-рыки вокруг где-то, но у меня было хорошее понимание.

Кажется странным, что IDE приводит меня в неправильное положение при попытке перейти к источнику класса TReceiveDataCommand.

Любые предложения, пожалуйста?

+0

Я предполагаю, что вы используете устаревший файл dcp –

+0

Я сделал чистую/чистую все около 5 раз, и это не имеет никакого значения. – weblar83

+0

Какую версию Delphi вы используете? Я нащупываю ваш пример сейчас в течение нескольких часов, и только однажды мне удалось воспроизвести вашу проблему. Это было на Delphi XE8, где IDE сообщало, что в классе нет поля, даже если вы его понимаете в конструкторе класса. Поэтому я даже не смог скомпилировать код на первом месте. Когда я скопировал этот код в Delphi XE3, он скомпилировался без проблем. Когда я затем скопировал этот код из Delphi XE3 в новый проект в Delphi XE8, он также скомпилировался и работал без проблем. ... – SilverWarior

ответ

1

Тип TReceiveCommand определен в другой упаковке. Компилятор использует файл .dcp для разрешения имен в этом другом пакете. Если Info не распознается, то, очевидно, файл .dcp, который находит компилятор, не соответствует исходному коду в вопросе.

Логический вывод состоит в том, что компилятор находит устаревший файл .dcp.

+0

Я сделаю поиск в моей системе, посмотрю, есть ли скрытый файл, о котором я не знаю ... – weblar83

+0

Итак, проблема теперь решена. По той или иной причине очень старая версия пакета появилась в пакете bpl «требует» списка, что для меня не имеет никакого смысла, потому что я построил этот пакет из нового и не было никакой ссылки на это старый, устаревший пакет. Эта старая версия не содержит свойства «Информация». – weblar83

+0

Нет, это не так. Вы сообщаете ошибку компиляции. Файл bpl используется только во время выполнения. Ваша проблема, как я описал. –

0

У меня это было, только когда я перебрался с Xe6 на xe7. Он связывался как с материалом xe6, так и с xe7. Поскольку преобразование/миграция проекта не выполняли свою работу. Я проверил бы пути в файлах dproj.

И теперь для совершенно очевидного вопроса - вы перестроили?

Смежные вопросы