2014-09-16 3 views
1

Я определяю в функции post_access() переменная my_reg_file (эта функция является vr_ad крючком для реализации побочных эффектов):Specman ошибка х компиляций: Нет такого переменного «XXX»

//file1.e 
extend TIMER_LOAD_0 vr_ad_reg { 
    post_access(direction : vr_ad_rw_t) is first { 
     var my_reg_file : TIMER vr_ad_reg_file = 
     get_parents()[0].as_a(TIMER vr_ad_reg_file); 

     .... 

    }; 
}; 

Тогда я расширяю эту функцию в другом е файл:

//file2.e 
extend TIMER_LOAD_0 vr_ad_reg { 
    post_access(direction : vr_ad_rw_t) is also { 
     start my_reg_file.some_tcm(); 
    }; 
}; 

Я получаю ошибку компиляции:

*** Error: No such variable 'my_reg_file' 

Почему post_access() не распознает переменную my_reg_file? Спасибо за помощь.

Примечание: file1.e импортируется до того file2.e

+1

Спасибо, помог мне выделить: – LordTitiKaka

ответ

3

my_reg_file является локальной переменной, из этого конкретного метода слоя, а не совместно с другими слоями методом. Я думаю, что единственный способ общения между слоями методов: a. используя переменную, сохраненную в результате, к которой можно получить доступ с любого уровня метода. b. используя элемент структуры.

3

Другим решением, которое кажется еще лучше, является добавление отдельного метода к этому подтипу, например. get_my_reg_file(), который вернет нужное значение, а затем вызовет этот метод, где это значение необходимо, вместо использования локальной переменной.