从不兼容类型nullptr_t分配给DWORD

问题描述

尽管阅读了几个互联网和论坛问题/答案,但我仍然不明白为什么以下代码会生成“来自不兼容指针类型的赋值”错误。

void ITEM_MANAGER::FindItemMonster(LPCHARACTER ch,std::string name_item){
    DWORD iGasite = 1;
    int iIndex = 0;
    itertype(m_map_pkDropItemGroup) it;

    for (std::map<DWORD,CDropItemGroup*>::iterator it = m_map_pkDropItemGroup.begin(); it != m_map_pkDropItemGroup.end(); it++)
    {
        if (it != m_map_pkDropItemGroup.end())
        {
            __typeof(it->second->GetVector()) v = it->second->GetVector();

            for (DWORD i = 0; i < v.size(); ++i)
            {
                TItemTable* Titem = ITEM_MANAGER::instance().GetTable(v[i].dwVnum);
                bool nume = (name_item.length() ? strstr(Titem->szLocaleName,name_item.c_str()) != NULL : true);
                const CMob* pMob = CMobManager::instance().Get(it->first);
                std::string name_monster(pMob->m_table.szLocaleName);
                if (nume)
                {
                    DWORD mob_vnum = pMob->m_table.dwVnum;
                    int iFounded = SECTREE_MANAGER::instance().GetMonsterCountSpawned(mob_vnum);
                    std::string nume_item(Titem->szLocaleName);
                    boost::algorithm::replace_all(nume_item," ","_");
                    std::string nume_mob(name_monster.c_str());
                    boost::algorithm::replace_all(nume_mob,"_");
                    ch->ChatPacket(CHAT_TYPE_COMMAND,"searched_item %d %s %s %d %d %d %d %d",iIndex,nume_item.c_str(),nume_mob.c_str(),v[i].dwVnum,v[i].iCount,v[i].iProcent,iFounded,mob_vnum);
                    iIndex = iIndex + 1;
                    iGasite = iGasite + 1;

                }

            }
        }
    }

    ch->ChatPacket(CHAT_TYPE_COMMAND,"searched_item_count %d",iGasite);

    iGasite = iGasite = NULL;
    iIndex = iIndex = NULL;
}

编译器错误:

item_manager.cpp:1136:22: error: assigning to 'DWORD' (aka 'unsigned int') from incompatible type 
  'nullptr_t'
    iGasite = iGasite = NULL;
                        ^~~~
/usr/include/sys/_null.h:35:14: note: expanded from macro 'NULL'
#define NULL    nullptr
            ^~~~~~~
item_manager.cpp:1137:20: error: assigning to 'int' from incompatible type 'nullptr_t'
    iIndex = iIndex = NULL;
                      ^~~~
/usr/include/sys/_null.h:35:14: note: expanded from macro 'NULL'
#define NULL    nullptr
            ^~~~~~~
2 errors generated.

解决方法

在将NULL定义为以下变量时,您将其用作零的常量:

// in /usr/include/sys/_null.h:35:14
#define NULL nullptr

自C ++ 11起,这是标准定义。

nullptr的类型为std::nullptr_t,而不是整数,因此无法将其分配给DWORD iGasite的{​​{1}}。

只需删除所有使用过unsigned int的地方,然后将其适当地替换为NULL0

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...