Erstellen Sie eine Klasse indexer operator[] erlaubt string-parameter (string, index)
Ich möchte erstellen Sie eine Klasse in c++. Diese Klasse muss die Verwaltung mit einer Sammlung.
OK, kein problem, ich möchte mit operator [], aber natürlich, in diesem Fall, mein Wunsch ist es, den index nicht durch position, sondern durch name ==> das bedeutet, dass mit einem string-indexer.
Es scheint, dass etwas dieser Art ist nicht so nett zu meinem compiler:
//In hpp
class myclass {
...
...
std::string operator[](const std::string& name);
}
//In cpp
std::string myclass::operator[](const std::string& name) {
...
}
//In main
myclass m;
std::string value = m["Name"];
Compiler sagt mir, dass er nicht lösen kann, das, weil operator[const char[5]] ist nicht vorhanden.
OK OK
Ich könnte diese Abbildung...
Compiler denkt, dass durch aufrufen von m["Name"] ich bin versucht zu rufen, ein operator Aufnahme einen char*, und nicht einen string... ok
Ändern wir den code mit dem operator[] erlaubt einen char* als parameter... nichts.
Kann jemand mir sagen, wie ein solches Ergebnis zu erzielen, das in c++ in einem best practice Weg? Ich nehme an, dass ist ein häufiges problem index string und nicht integer...
Danke.
- was passiert, wenn Sie versuchen
std::string value = m[std::string("Name")];
- Ich bin mir ziemlich sicher, dass der compiler ist eine Sie
- std::string hat einen ctor, das dauert ein char*, also, das sollte keine Rolle spielen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte es funktionieren. Siehe dieses Beispiel, das kompiliert und funktioniert ok für mich:
Und ich sehe keinen Grund, es sollte nicht, da std::string impliziten Konstruktor der Einnahme
const char*
so soll die Umstellung automatisch erfolgen.Edit: Aus den Kommentaren scheint es Ihr problem war mit Ihrem Haupt-beeing so:
Der Grund:
Den code, den Sie zur Verfügung gestellt haben sollten kompilieren okay (vorausgesetzt, die
operator
istpublic
und Sie beenden Ihreclass
Erklärung mit einem;
). Ich vermute, dass der compiler-Fehler ist woanders.Persönlich würde ich
std::map<std::string, std::string>
als der container-Klasse.