Более новая версия G CC выбрасывает неверную ошибку преобразования - PullRequest
0 голосов
/ 16 марта 2020
    class FixedDataBlock: public DataBlockHeaderCommon<BlockSize>
    {
    // Construction
    public:
        FixedDataBlock(void* pool, SizeT const entrySize, SizeT const alignment)
            : base_t(eBlkFixData, pool)
        {
            this_t* dummy = reinterpret_cast<this_t*>(0);
            // offsets is a type of uint16_t
            OffsetT dataStartBlockOffset = reinterpret_cast<OffsetT>( &dummy->data[0] );

        }

    // Member variables
    private:
        int8_t      data[ BlockSize-sizeof(header_t) ];
    };

ошибка: недопустимое преобразование типа: "int8_t = {подписанный символ} *" в "uint16_t = {unsigned short}" для строки

OffsetT dataStartBlockOffset = reinterpret_cast (& dummy-> data [0] );

// dummy-> data [0] имеет подпись char *, а dataStartBlockOffset имеет беззнаковое короткое значение

Приведенный выше код прекрасно компилируется на windows, но не работает только с G CC.

1 Ответ

0 голосов
/ 16 марта 2020

Использование смещения микро исправленной ошибки компиляции. OffsetT dataStartBlockOffset = (OffsetT) offsetof (FixedDataBlock, data);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...