我从C ++开始,正在尝试通过合成扩展std :: map类。
我想使用此类CardPackage
来获取ID和指向我的EntityCards
的指针的私有映射,并实现三种访问私有映射AddCard
的方法GetCard
,RemoveCard
和m
。
问题是我无法使用m
方法(find
和end
),因为我收到以下错误消息: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/