Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.05.19;
Скачать: CL | DM;

Вниз

То ли лыжи не едут...   Найти похожие ветки 

 
Dimka Maslov ©   (2013-01-11 21:57) [0]

Пишу прогу. В проге есть модуль. В модуле куча различных классов. Ввожу ещё один класс. В классе метод. Нажимаю Shift+Ctrl+C. Класс разворачивается в implementation. Всё нормально. Компилирую. Получаю такую ошибку: http://www.daemys.com/f/bug.jpg

Дичь какая-то. Но происходит на двух разных машинах. Причём только если в рамках данного проекта в данном модуле объявлен класс с таким именем. Независимо от предка. Независимо от настроек проекта (он пересоздавался заново). Независимо от расположения относительно других классов и методов. Если класс обозвать по другому - всё работает. Что же это такое делается?


 
alexdn ©   (2013-01-11 22:01) [1]

Это потому что XP и Delphi 2006 помоему..


 
Игорь Шевченко ©   (2013-01-11 22:02) [2]

По uses ни с кем не пересекаешься с идентификатором, объявленным с таким же именем ?


 
Dimka Maslov ©   (2013-01-11 22:03) [3]

2009. И чем этой парочке не нравится TBucklingPlateItem в модуле shprenClasses проекта shpren.plugin?


 
Dimka Maslov ©   (2013-01-11 22:04) [4]


> Игорь Шевченко ©   (11.01.13 22:02) [2]


Нет. Такого имени нигде больше нет.


 
alexdn ©   (2013-01-11 22:08) [5]

Не едут. Ошибку строчкой выше видел?


 
Аббат Пиккола   (2013-01-11 22:08) [6]

Я бы проверил, что я имею в виду, говоря "Если класс обозвать по другому - всё работает":

1. сначала стер бы букву m
TBucklingPlateIte.Proc
2. затем букву e
TBucklingPlateIt.Proc

и так далее.
Можно, конечно, и короче - делением пополам.
Может сдуру в имени класса одна буква русская, к примеру.


 
Dimka Maslov ©   (2013-01-11 22:11) [7]


> Не едут. Ошибку строчкой выше видел?


Она вроде как пустая. А выше комментарий. И если переименовать класс то всё работает.


> Аббат Пиккола   (11.01.13 22:08) [6]


Пробовал. Реагирует только на такое имя.


 
Dimka Maslov ©   (2013-01-11 22:12) [8]


> Может сдуру в имени класса одна буква русская, к примеру.


Хоть греческая. Всё должно работать.


 
Игорь Шевченко ©   (2013-01-11 22:13) [9]

По uses ни с кем не пересекаешься с идентификатором, объявленным с таким же именем ?


 
Аббат Пиккола   (2013-01-11 22:16) [10]

Безумная идея: может dcu-файлы датированы как-то не так, а дата слетела из-за того что XP время опять отыграло на час из-за перевода времени? Может удалить dcu принудительно?


 
Dimka Maslov ©   (2013-01-11 22:16) [11]


> По uses ни с кем не пересекаешься с идентификатором, объявленным
> с таким же именем ?


Ни по uses, ни вообще никак. Такого имени нигде больше нет. Специально даже полный поиск по всем pas файлам на диске делал. И даже бы если пересекался, то такого быть не должно.


 
Аббат Пиккола   (2013-01-11 22:17) [12]

Если я верно помню, Delphi смотрит на дату и время редактирования файлов при перекомпиляциях


 
alexdn ©   (2013-01-11 22:17) [13]

> Dimka Maslov ©   (11.01.13 22:16) [11]
А переименовываешь на что? просто интересно, ну когда работает.


 
Dimka Maslov ©   (2013-01-11 22:17) [14]


> Безумная идея: может dcu-файлы датированы как-то не так,
>  а дата слетела из-за того что XP время опять отыграло на
> час из-за перевода времени? Может удалить dcu принудительно?
>


Удалялось всё, все настройки проекта (пересоздавался заново), все dcu, все временные файлы. Не помогает. Только переименовать класс. Но хочется разобраться, что за хрень вообще такая.


 
Dimka Maslov ©   (2013-01-11 22:19) [15]


> А переименовываешь на что? просто интересно, ну когда работает.


Во что угодно, хоть TBucklingPlateItem_, хоть TBucklingPlate, хоть вообще что.


 
Аббат Пиккола   (2013-01-11 22:19) [16]

Пробовал удалить dcu этого модуля?


 
Dimka Maslov ©   (2013-01-11 22:20) [17]


> Пробовал удалить dcu этого модуля?


Все dcu проекта


 
Аббат Пиккола   (2013-01-11 22:22) [18]

А при помещении этого же класса в другой модуль все работает?


 
Dimka Maslov ©   (2013-01-11 22:24) [19]


> А при помещении этого же класса в другой модуль все работает?


Да, работает.


 
Аббат Пиккола   (2013-01-11 22:26) [20]

7100 строк... Дубликат объявления точно исключен? Проверял поиском ?


 
Аббат Пиккола   (2013-01-11 22:26) [21]

Хотя - нет, на дубюликат было бы другое сообщение...


 
Dimka Maslov ©   (2013-01-11 22:26) [22]


> Проверял поиском ?


Дважды по всему компу.


 
Аббат Пиккола   (2013-01-11 22:30) [23]

Попробуй создать новый проект, засунуть туда только этот модуль и отклмпилировать


 
Dimka Maslov ©   (2013-01-11 22:36) [24]


> Попробуй создать новый проект, засунуть туда только этот
> модуль и отклмпилировать


Только этот модуль вне проекта не живёт. Он от второго модуля сильно зависит. А создавать новый проект с нуля я пробовал на двух компах - симптоматика одинаковая


 
Dimka Maslov ©   (2013-01-11 22:37) [25]

При этом прыгалка между interface и implementation работает. Проблема только при компиляции возникает.


 
Игорь Шевченко ©   (2013-01-11 22:41) [26]


> Дважды по всему компу.


Я бы проверил не только pas файлы но и *.*


 
Dimka Maslov ©   (2013-01-11 22:49) [27]


> Я бы проверил не только pas файлы но и *.*


Нет такого файла. Даже если и был, что чисто теоретически, как это может спровоцировать подобное поведение?


 
Игорь Шевченко ©   (2013-01-11 22:53) [28]

Dimka Maslov ©   (11.01.13 22:49) [27]

Чисто теоретически с таким именем может быть объявлен не класс в каком-то dcp или dcu


 
Dimka Maslov ©   (2013-01-11 22:58) [29]


> Dimka Maslov ©   (11.01.13 22:49) [27]


Ну даже если и существует такое объявление, как оно должно влиять на данный модуль и почему ошибка тогда не проявляется в другом модуле, имеющем те же зависимости?


 
брат Птибурдукова   (2013-01-11 23:00) [30]

было подобное в проекте com-сервера в *_tlb.pas, но тут же явно не та ситуация. Я б предположил, что в Users\...\Rad studio\... лежит вражеская дцуха и планомерное поедает мозг — но автор утверждает, что такого нет.


 
Аббат Пиккола   (2013-01-11 23:03) [31]

А если пойти на поводу у этих сообщений и поставить (хоть это и глупо) ";" после имени класса? Как будут выглядеть сообщения?

TBucklingPlateItem;.Proc


 
Dimka Maslov ©   (2013-01-11 23:10) [32]


> Аббат Пиккола   (11.01.13 23:03) [31]


Лучше не становится. Declatation expected but "." found (что естественно). Если убрать .Proc Unsatisfied forward or external declaration: "TBucklingPlateItem.Proc". Что тоже естественно.


 
Аббат Пиккола   (2013-01-11 23:10) [33]

А если вообще удалить реализацию метода, оставив только объявление в интерфейсе? Как будут выглядеть сообщения?
Вообще я сталкивался с подобным поведением, только когда имеется несколько мест с одинаковым объявлением, компилятор пытается использовать один файл, а IDE останавливается на строке в совсем ином файле. Они почему-то работают достаточно "независимо" друг от друга.


 
Dimka Maslov ©   (2013-01-11 23:10) [34]


> Аббат Пиккола   (11.01.13 23:03) [31]


Лучше не становится. Declatation expected but "." found (что естественно). Если убрать .Proc Unsatisfied forward or external declaration: "TBucklingPlateItem.Proc". Что тоже естественно.


 
Dimka Maslov ©   (2013-01-11 23:11) [35]


> А если вообще удалить реализацию метода, оставив только
> объявление в интерфейсе? Как будут выглядеть сообщения?


Unsatisfied естественно будет. И объявляется один раз.


 
Аббат Пиккола   (2013-01-11 23:12) [36]

То есть сообщения об ошибках явно изменились...


 
Dimka Maslov ©   (2013-01-11 23:15) [37]


> То есть сообщения об ошибках явно изменились...


Причём изменились на абсолютно правильные. Забавно другое. Если методу добавить аргументов, он начинает ругаться ещё и на закрывающую скобку, требуя на её месте точку с запятой. Дичь какая-то.


 
Аббат Пиккола   (2013-01-11 23:16) [38]

Ладно, а можно закомментировать все остальные (ну или максимум, сколько возможно) классы в этом модуле?

Разборщик явно путается в begin end, точках и точках с запятой. Есть возможность выбросить остальной код, чтобы он никак не мешал? Да. кстати, а там нет каких-нибудь директив компилятору с ветвлениями? Вроде IFDEF


 
Аббат Пиккола   (2013-01-11 23:20) [39]

{$IFDEF}


 
Dimka Maslov ©   (2013-01-11 23:21) [40]


> Аббат Пиккола   (11.01.13 23:16) [38]


Ветвлений нету. И если бы разборщик путался, он бы путался независимо от имени, и выдавал ошибку в другом месте. Выбрасывать код я тоже пытался (в разумных пределах), а также двигать объявление и реализацию по тексту. Ошибка всегда в одном и том же месте.



Страницы: 1 2 3 вся ветка

Текущий архив: 2013.05.19;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.011 c
2-1351213528
FIL-23
2012-10-26 05:05
2013.05.19
Поиск в Query


15-1358195403
Юрий
2013-01-15 00:30
2013.05.19
С днем рождения ! 15 января 2013 вторник


15-1358322148
O'ShinW
2013-01-16 11:42
2013.05.19
Браузер(FireFox), зараза, стал переходить на httpS


2-1351253875
i2e
2012-10-26 16:17
2013.05.19
сменить цвет выделенной ячейки StringGrid


2-1350981057
Инокентий
2012-10-23 12:30
2013.05.19
Дешифровка по кодовому слову