27 Stimmen

wie man Zeiger in einer Karte speichert

Ich arbeite an einem Projekt, das Folgendes erfordert

class MyObj;

map<string, MyObj*> myMap;

Die Logik ist hier, um den Dateinamen der Klasse MyObj zuzuordnen.

Wenn ich versuche, folgendes einzufügen

string strFilename = "MyFile";
MyObj* pObj  = new MyObj();

myMap.insert(strFileName, pObj); // This line throwing following error.

keine passende Funktion für den Aufruf von 'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, void*> > >::insert(std::string&, void*)'

Kann mir jemand helfen, wie ich das Problem lösen kann? Gibt es einen besseren Weg, wie wir dies mit STL tun können?

32voto

Moo-Juice Punkte 37380

Ich habe dieses Zeug typisiert, um es besser lesbar zu machen...

typedef std::map<std::string, MyObj*> MyMap;
typedef std::pair<std::string, MyObj*> MyPair;

MyMap myMap;
string strFilename = "MyFile";
MyObj* pObj = new MyObj();
myMap.insert(MyPair(strFilename, pObj));

18voto

robev Punkte 1859

Std::map erfordert ein Paar, wenn Sie die Funktion insert verwenden.

Sie haben zwei Möglichkeiten, entweder:

myMap[strFileName] = pObj;

Oder:

myMap.insert(std::make_pair(strFileName,pObj));

8voto

Prasoon Saurav Punkte 88056

myMap.insert(strFileName, pObj);

Utilisez make_pair() innerhalb insert()

#include <utility>
//...
myMap.insert (std::make_pair(strFileName, pObj) ) ;

4voto

Steve M Punkte 7816

No hay insert Mitglied, das einen Schlüssel und einen Wert als Argumente annimmt. Verwenden Sie einfach den Indexoperator:

myMap[fileName] = obj;

4voto

Strahd_za Punkte 208
map<string,MyObj*> myMap;

string strFilename = "MyFile";  
MyObj* pObj = new MyObj();

myMap[strFilename] = pObj;

Das sollte gut funktionieren. Denken Sie nur daran, dass das Löschen der Karte den Speicher, auf den die Zeiger zeigen, nicht freigibt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X