Boost 1.59编译错误

时间:2015-10-31 23:25:24

标签: c++ boost

将我的文件更新为boost_1.59.0后,我遇到了一个很大的错误。我无法理解错误是什么,因为在提升1.43中,所有工作都很好。

这是我的提升声明和我的功能。

    boost::unordered_map<VID, size_t>::iterator iterTargetMap = rSkillUseInfo.TargetVIDMap.find(TargetVID);

if (rSkillUseInfo.TargetVIDMap.end() != iterTargetMap)
    {
        size_t MaxAttackCountPerTarget = 1;

        switch (SkillID)
            {
            case SKILL_SAMYEON:
            case SKILL_CHARYUN:
                MaxAttackCountPerTarget = 3;
                break;
            }

        if (iterTargetMap->second >= MaxAttackCountPerTarget)
            {
                sys_log(0, "SkillHack: Too Many Hit count from SkillID(%u) count(%u)", SkillID, iterTargetMap->second);
                return false;
            }

        iterTargetMap->second++;
    }
else
    {
        rSkillUseInfo.TargetVIDMap.insert( std::make_pair(TargetVID, 1) );
    }

我也试过c ++ 11中的auto

auto iterator iterTargetMap = rSkillUseInfo.TargetVIDMap.find(TargetVID);

这是我的错误日志gcc49 http://pastebin.com/p1KLqs9H 我无法在这里写错误太大了。

我被困4天这个错误。 :(

这是vid.h

class VID
{
public:
    VID() : m_id(0), m_crc(0)
    {
    }

    VID(DWORD id, DWORD crc)
    {
        m_id = id;
        m_crc = crc;
    }

    VID(const VID &rvid)
    {
        *this = rvid;
    }

    const VID & operator = (const VID & rhs)
    {
        m_id = rhs.m_id;
        m_crc = rhs.m_crc;
        return *this;
    }

    bool operator == (const VID & rhs) const
    {
        return (m_id == rhs.m_id) && (m_crc == rhs.m_crc);
    }

    bool operator != (const VID & rhs) const
    {
        return !(*this == rhs);
    }

    operator DWORD() const
    {
        return m_id;
    }

    void Reset()
    {
        m_id = 0, m_crc = 0;
    }

private:
    DWORD m_id;
    DWORD m_crc;
};

1 个答案:

答案 0 :(得分:2)

通过查看错误,您似乎必须为 VID 类型定义哈希函数,才能将其用作地图中的键。

标准哈希函数已在STL中为基本类型定义,但您必须为自己定义域类型的特定哈希函数。

通常,做这样的事情就足够了:

namespace std {
    template<> struct hash<VID> {
        using argument_type = VID;
        using result_type = std::size_t;

        result_type operator()(argument_type const& vid) const {
            // what to put here depends on the type of VID
            // and how you want to create the hash
        }
    };
}

困难通常在于理解如何创建哈希。根据我的经验,对于用户定义的类,我曾经使用过一些数据成员的标准专业化,这是最重要的成员。

在您的情况下,作为示例,您可以将DWORD转换为几个unsigned int并使用它们来使用std::hash<unsigned int>来获取哈希值(我假设这就是Windows API中的 DWORD ,就我记忆而言,这是一个32位无符号整数。)

正如评论中已经说明的那样,请参阅here了解更多详情。