Ich beginne mit C++ und ich versuche, std :: map Klasse über Komposition zu erweitern. Ich möchte diese Klasse CardPackage
verwenden, um eine private Karte von IDs und Zeiger zu meinem EntityCards
zu haben und drei Methoden AddCard
, GetCard
und RemoveCard
zu implementieren, die auf die private Karte zugreifen werden m
.Wert von privaten Std erhalten :: map
Das Problem ist, dass ich nicht in der Lage gewesen, mit m
Methoden (find
und end
) zu arbeiten, weil ich die folgenden Fehlermeldung erhalten:
expression must have a pointer type
Ich verstehe, dass m
Bedürfnisse ein Zeiger sein Der Zugriff erfolgt durch Pfeilnotation (oder Punkt), aber ich kann den Code nicht anpassen, um meine Anforderungen zu erfüllen.
Rubrik:
#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;
};
Quelle:
#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;
}
ich falsch angenommen. (Punkt) und -> (Pfeil) waren gleich. http://stackoverflow.com/questions/1238613/what-is-the-difference-between-the-dot-operator-and-in-c – Sturm
@Sturm sie sind nicht. Normalerweise kann nur '->' oder '.' angewendet werden, abhängig davon, ob Sie es auf einen Zeiger oder ein Objekt anwenden. Es gibt jedoch einige "hybride" Typen, die beides implementieren (z. B. Smartpointer). – user463035818
@Martin wäre es nicht 'return it-> second;'? Ich erhalte einen Fehler, wenn ich gerade * es zurückschicke – Sturm