Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];

Вниз

Internal error   Найти похожие ветки 

 
shulc   (2002-08-20 17:38) [0]

Пожалуйста помогите. Или я чего-то не понимаю вообще, или это ошибка Delphi. Привожу код.
Type TR=Object
i:integer;
b:real;
procedure read;
function my:MyType;{Далее не важно}
end;
var r_tr:array[1..20] of TR
---------------------------------
---------------------------------
procedure My;
var j:byte;
begin
for j:=1 to 5 do
r_tr[j]:=r_tr[j+1] {Если этого присвоения нет, то нет
и ошибки}
end;
Что, сдесь не правильно?


 
Виктор Щербаков   (2002-08-20 17:58) [1]

В Борланд пиши...


 
Андрей Прокофьев   (2002-08-20 18:01) [2]

Напиши поподробнее, какая ошибка?
У меня [D6] такое работает


 
shulc   (2002-08-20 18:31) [3]

Привожу выдержку из Helpа
Internal error:<Error Code>, где Error Code - С9999. Цифры не помню. Дело в том, что заменил Object на Class Все заработало.
Но необходимо применять методы Create и Free. Потеря не большая,
но хотелось бы знать, в чем дело?
You should never get this error message - it means there is a programming error in the compiler.

If you do, please call Inprise Developer Support and let us know the ErrorCode (e.g. "C1196") that appears in the error message. This will give us a rough indication what went wrong. It is even more helpful if you can give us an example program that produces this message.


 
Толик   (2002-08-20 18:40) [4]

Internal error - это глюк Делфей, лечится, как правило, их перезапуском. У меня таких ошибок уже целая коллекция...


 
shulc   (2002-08-20 19:14) [5]

2 Толик. Не толко Delphi, пьютер перезагружал, выключал, загружал другие проекты - пофиг. Комментирую это присваивание,
пишу a:=1 , нет ни какой ошщибки.


 
ЮЮ   (2002-08-21 03:32) [6]

Из Неlpa:
Object types are supported for backward compatibility only. Their use is not recommended.


 
Digitman   (2002-08-21 09:27) [7]

Дословно это даже скомпилировано не будет.

такое объявление поля
function my:MyType
недопустимо


а вот это

Type TR=Object
i:integer;
b:real;
end;

var r_tr:array[1..20] of TR;
...
procedure My;
var j:byte;
begin
for j:=1 to 5 do
r_tr[j]:=r_tr[j+1]
end;


прекрасно работает в D5

только вот непонятно, зачем в массиве держать сами объектные структуры, когда можно держать лишь ссылки на них...


 
Толик   (2002-08-21 10:08) [8]

to Digitman © (21.08.02 09:27)
Ну так о том и речь, что исходник не компилируется в том виде, в котором представил его автор. Но вместо внятного сообщения об ошибке (например о том, что объявлена ф-я, а определена процедура), Делфя говорит "internal error...".

to shulc (20.08.02 19:14)
А вот почему при закомментированном r_tr[j] := r_tr[j+1] ошибки не происходит, это уже вопрос... Например то, что написал Digitman © (21.08.02 09:27) работает. М.б. просто взять этот код и не искать причину internal error.


 
Digitman   (2002-08-21 10:21) [9]

>Толик

Совершенно непонятно, как это у автора происходит "Если этого присвоения нет, то нет и ошибки" ... А ошибка, связанная с неверным объявлением поля куда делась, спрашивается ?


 
shulc   (2002-08-21 17:42) [10]

Минуточку, минуточку.Описание Function my:MyType имеет отношение к TR, как метод объекта, а Procedure My ни какого отношения к объекту типа TR не имеет, и называться она может как угодно и тело этой процедууры может быть где угодно. Дело в том, что: Почему нельзя присваивать один объект другому? r_tr[j] := r_tr[j+1]


 
Digitman   (2002-08-21 17:50) [11]

>shulc

Т.е., тип MyType все же где-то объявлен ранее по тексту ?
Тогда - нет вопросов.


> Почему нельзя присваивать один объект другому



Почему же нельзя ? Можно. В данном контексте при таком присвоении будет выполнена инструкция rep movs(b/d), копирующая блок памяти объектной структуры. И это успешно компилируется и работает. Но - вполне возможно - проблема скрывается под фразой "{Далее не важно}", присутствующей в приведенной тобой декларации.


 
Anatoly Podgoretsky   (2002-08-21 17:51) [12]

function my:MyType;{Далее не важно}
procedure My;

А ты не поставил в тупик компилятор?


 
shulc   (2002-08-21 18:08) [13]

Пардон, наверное неправилно объяснил. Я же не написал
procedure Tr.My. Пусть код будет в таком виде.
Type TR=Object
i:integer;
b:real;
procedure read;
function my:MyType;{Далее не важно}
end;
var r_tr:array[1..20] of TR
---------------------------------
---------------------------------
procedure MyProc;
var j:byte;
begin
for j:=1 to 5 do
r_tr[j]:=r_tr[j+1] {<----Если этого присвоения нет, то нет
и ошибки}
end;
Ладно, нечучу Вас напрягать, проблему я решил, заменил Object на Class, так наверное будет лучше.Просто в Pascale это всегда проходило, а тут такая фишка. Спасибо всем отозвавшимся. Извините за отнятое время.


 
Digitman   (2002-08-21 18:23) [14]

>shulc

Точно. Тупик. Компилятор "вытягивает себя за волосы".
Склонен предположить, что internal error в дан.случае - переполнение стека из-за рекурсивной регистрации неверно объявляемых идентификаторов.

Строка присвоения здесь ни при чем. Смотри последовательность деклараций всего, что связано с идентификатором TR. Циклические ссылки приводят к проблеме, об истоках которой Борланд предпочитает не распространяться в деталях, попросту прерывая процесс компиляции с подобным обобщенным сообщением об ошибке.



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

Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
14-3607
Vladimir_Shk
2002-08-07 13:10
2002.09.02
DelphiIDE


3-3306
VZ-KZ
2002-08-13 14:59
2002.09.02
Опять же база и Excel


1-3351
AL2002
2002-08-21 00:01
2002.09.02
Как добавить в ListBox столбики...


7-3633
neo_max
2002-06-21 12:53
2002.09.02
Вопрос !!!!


7-3648
DeMoN-777
2002-06-18 14:13
2002.09.02
Ждущий режим в WinNT 2000 XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский