![]() |
#7 |
Модератор
|
Блин! Код-то откомпилирован у потомков!
лежит где нибудь в памяти код: ПАПА_______________________ПОТОМОК адрес смещение переменная____адрес смещение переменная 00000 FF mapInvoiceTrans_______00000 FF mapInvoiceTrans 000FF FF vatCodeCache_________000FF FF vatCodeCache Вы добавляете код сюда:________потомок не перекомпилирован. 001FE 0А projId________________Но при вызове он может вызвать _____________________________метод откомпилированного родителя, _____________________________потому и не упадет с Run-time Error Теперь. Вы добавили код сюда: ПАПА_______________________ПОТОМОК адрес смещение переменная_____адрес смещение переменная 00000 FF mapInvoiceTrans________00000 FF mapInvoiceTrans Вы добавляете код сюда:_________000FF FF vatCodeCache 00109 0А projId_________________А в потомке - ссылка на СТАРЫЕ адреса!!! снова пошел старый код, но с новыми адресами 00208 FF vatCodeCache Поэтому при обращении к переменной vatCodeCache она обратиться к переменной, определенной в родителе по адресу 000FF. И что она там найдет?? кусок совершенно другой переменной! Поэтому и вылетает с Run-time error! Что у Вас, кстати, и произошло. Так чему здесь так удивляться? После инкриментной перекомпиляции: ПАПА_______________________ПОТОМОК адрес смещение переменная_____адрес смещение переменная 00000 FF mapInvoiceTrans________00000 FF mapInvoiceTrans 00109 0А projId_________________00109 0А projId 00208 FF vatCodeCache__________00208 FF vatCodeCache ![]() С Уважением, Георгий. Хм. При редактировании - все нормально. А после постинга пробелы форматирующие убрались ![]() |
|
|
За это сообщение автора поблагодарили: kashperuk (5). |
Теги |
инкрементная компиляция, объявление переменной, наследование |
|
|