Ошибка синтаксиса Promela: Ошибка: неполная структура ref 'table' saw 'operator: ='

У меня есть следующие typedefs. Тип pub содержит два целых числа, а pub_table содержит массив издателей и int.

typedef pub{
    int nodeid;
    int tid
};

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

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

"Ошибка: неполная структура 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; а затем после инициализации всех полей в р, я попытался назначить за один раз здесь pt.table[pt.last] = p, Мне удалось решить это так:

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

REF:

Текущая реализация Spin налагает следующие ограничения на использование объектов typedef. Невозможно присвоить значение полного объекта typedef непосредственно другому такому объекту того же типа в одном назначении.

Другие вопросы по тегам