代码之家  ›  专栏  ›  技术社区  ›  Andrew Truckle

无法在我的结构使用运算符>>重载的情况下编译此代码

  •  0
  • Andrew Truckle  · 技术社区  · 2 年前

    我有这样的结构:

    struct S_SPECIAL_EVENT
    {
        BOOL            bEventAllDay{};
    
        friend CArchive& operator<<(CArchive& rArchive, S_SPECIAL_EVENT const& rsSE)
        {
            const WORD wVersion = 1;
            return rArchive << wVersion
                << gsl::narrow<bool>(rsSE.bEventAllDay);
        }
    
        friend CArchive& operator>>(CArchive& rArchive, S_SPECIAL_EVENT &rsSE)
        {
            WORD wVersion{};
    
            rArchive >> wVersion;
            rsSE.bEventAllDay = readAndCast<BOOL, bool>(rArchive);
    
            return rArchive;
        }
    };
    

    我尝试添加两个序列化运算符。但我会遇到以下编译错误:

    错误C3861:“readAndCast”:找不到标识符

    有问题的方法在应用程序标头中定义:

    // See: https://stackoverflow.com/a/58746336/2287576
    template <typename T, typename U>
    T readAndCast(CArchive& ar) {
        U x;
        ar >> x;
        return static_cast<T> (x);
    }
    

    我已将该标头包含在我的文件中。那么,为什么它不符合要求呢?


    我更改了代码以手动执行操作:

    friend CArchive& operator>>(CArchive& rArchive, S_SPECIAL_EVENT &rsSE)
    {
        WORD wVersion{};
        bool bData{};
    
        rArchive >> wVersion;
        rArchive >> bData;
        rsSE.bEventAllDay = gsl::narrow<BOOL>(bData);
    
        return rArchive;
    }
    

    但我想知道原来问题的答案。

    0 回复  |  直到 2 年前