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

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

typedef pub{
    int nodeid;
    int tid
};

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

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

"Ошибка: неполная структура ref "таблица" увидела "оператор: =""

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

К сожалению, я не вижу, что не так в этой строке?


person Anton Belev    schedule 01.02.2015    source источник


Ответы (1)


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

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

ССЫЛКА:

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

person Anton Belev    schedule 08.02.2015