私はC++から始まり、std :: mapクラスをコンポジションで展開しようとしています。 私はEntityCards
にIDとポインタのプライベートマップを持っているために、このクラスCardPackage
を使用してプライベートマップm
にアクセスする三つの方法AddCard
、GetCard
とRemoveCard
を実装したいです。プライベートstd :: mapから値を取得
expression must have a pointer type
私はm
ニーズはへのポインタであることがあることを理解する:
問題は、私は、次のエラーメッセージが表示されますので、m
方法(find
とend
)で動作することができていないということです矢印表記(またはドット)でアクセスできますが、要件を尊重するようにコードを適応させることはできません。
ヘッダー:
#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;
}
私は間違っています。 (ドット)と - >(矢印)は同じでした。 http://stackoverflow.com/questions/1238613/what-is-the-difference-between-the-dot-operator-and-in-c – Sturm
@Sturmそうではありません。ポインタやオブジェクトに適用するかどうかによって、通常は ' - >'や '.'のみが適用されます。しかし、両方を実装するいくつかの "ハイブリッド"タイプ(スマートポインタなど)があります。 – user463035818
@Martinは 'return it-> second 'にならないでしょうか?私がちょうどそれを返すと私はエラーになります – Sturm