2015-02-01 7 views
0

У меня есть следующие typedefs. Тип паба хранит два ints, а pub_table хранит массив издателей и int.Ошибка симуляции Promela: Ошибка: неполная структура ref 'table' t saw 'operator: ='

typedef pub{ 
    int nodeid; 
    int tid 
}; 

typedef pub_table{ 
    pub table[TABLE_SIZE]; 
    int last 
}; 

Тогда на линии pt.table[pt.last] = p; я получаю сообщение об ошибке говорящее

" Error: incomplete structure ref 'table' saw 'operator: ='"

if 
:: node_type == publisher -> 
     pub p; 
     p.nodeid = node_id; 
     p.tid = topic_id; 
     pt.last = pt.last + 1; 
     pt.table[pt.last] = p; 
fi 

К сожалению, я не могу видеть то, что случилось на этой линии?

ответ

1

Ошибка была связана с тем, что вы не можете назначить полную переменную typedef за один раз. Я попытался сделать это, указав локальную переменную pub p;, а затем после инициализации всех полей в p, я попытался назначить за один раз здесь pt.table[pt.last] = p. Мне удалось решить так:

pt.table[pt.last].nodeid = node_id; 
pt.table[pt.last].tid = topic_id; 

REF:

The current Spin implementation imposes the following restrictions on the use of typedef objects. It is not possible to assign the value of a complete typedef object directly to another such object of the same type in a single assignment.