C++ 较新版本的GCC引发无效的转换错误

C++ 较新版本的GCC引发无效的转换错误,c++,type-conversion,offset,gcc-warning,C++,Type Conversion,Offset,Gcc Warning,错误:无效的类型转换:行的int8_t={signed char}*到uint16_t={unsigned short} Offset dataStartBlockOffset=重新解释施法和模拟->数据[0] //dummy->data[0]为有符号字符*且dataStartBlockOffset为无符号短字符 上面的代码在windows上编译很好,但只有在GCC上才失败。使用offsetof micro修复了编译错误。 OffsettDataStartBlockOffset=OffsetOf

错误:无效的类型转换:行的int8_t={signed char}*到uint16_t={unsigned short}

Offset dataStartBlockOffset=重新解释施法和模拟->数据[0]

//dummy->data[0]为有符号字符*且dataStartBlockOffset为无符号短字符


上面的代码在windows上编译很好,但只有在GCC上才失败。

使用offsetof micro修复了编译错误。
OffsettDataStartBlockOffset=OffsetOffsetOfficeOfffixedDataLock,数据

你能减少你的代码问题吗!此\u t*虚拟=重新解释\u cast0;//偏移量是uint16\u t OffsetT dataStartBlockOffset=reinterpret\u cast&dummy->data[0];-从几个方面看,这似乎是错误的。首先,你可以通过reinterpret_cast有效地做一些事情,这些事情看起来都不一样。第二,虚拟解引用是解引用一个nullptr,这是肯定的。代码的目的是从对象开始获取对象成员数据[]的偏移量,偏移量将是常量,但考虑到不同的操作系统环境,它可能会发生变化。代码正在处理MMF和偏移量指针。编译器错误不是异常,它们是打印的,而不是抛出的。不要滥用标准术语。请正确设置问题格式
    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) ];
    };