我从C ++开始,正在尝试通过合成扩展std :: map类。
我想使用此类CardPackage来获取ID和指向我的EntityCards的指针的私有映射,并实现三种访问私有映射AddCard的方法GetCardRemoveCardm

问题是我无法使用m方法(findend),因为我收到以下错误消息:

expression must have a pointer type

我知道m必须是一个箭头符号(或点)可以访问的指针,但我无法弄清楚该代码是否符合我的要求。

标头:

#include <EntityCard.h>

class CardPackage
{
public:

CardPackage();
~CardPackage();

void AddCard(EntityCard* card);
EntityCard* GetCard(int id);
bool RemoveCard(int id);

private:
    map<int, EntityCard*> m;
};


资源:

#include "CardPackage.h"

CardPackage::CardPackage()
{
}


CardPackage::~CardPackage()
{
}

   void CardPackage::AddCard(EntityCard *card)
   {
        m[card->ID] = card;
   }

EntityCard* CardPackage::GetCard(int id)
{
    if (id < 1) { return nullptr; }
    if(m->find(id) == m->end())
    {
        return (m[id]);
    }
    else
    {
        return nullptr;
    }
}

bool CardPackage::RemoveCard(int id)
{
    //TODO
    return false;
}

最佳答案

   if(m->find(id) == m->end())


应该:

   if(m.find(id) != m.end())


m不是指针,因此您需要.,而不是->。您还会以错误的方式进行测试。

更好的实现是:

   const auto it = m.find(id);
   if (it != m.end())
       return it->second;
   else
       return nullptr;


区别在于,此操作仅在映射中执行一次查找,而您的代码执行两次。

关于c++ - 从私有(private)std::map获得值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42366905/

10-12 23:25