Indexoperator bei Zeiger
-
Hey!
#include <iostream> #include <vector> #include <string> using namespace std; class Test { vector<string> mask; public: string& Test::operator[](int index) { return mask[index]; } }; int main() { Test* test = new Test(); // Dieser Ausdruck ist vom Typ 'Test' // Sollte aber vom Typ 'std::string' sein ?! test[0]; string* s = new string(); s->resize(10); s[0] = 'X'; // Hier funktioniert der Index- Operator aber normal... cout << *s; // X ... }
-
jo !
#include <iostream> #include <vector> #include <string> using namespace std; class Test { vector<string> mask; public: string& Test::operator[](int index) { return mask[index]; } }; int main() { Test* test = new Test(); // Dieser Ausdruck ist vom Typ 'Test' // Sollte aber vom Typ 'std::string' sein ?! // test ist vom typ Test * // test[0] (oder *test) ist vom typ Test // was du suchst ist *test[0]; // oder test[0][0]; // oder Test &t = *test; t[0] string* s = new string(); s->resize(10); s[0] = 'X'; // Hier funktioniert der Index- Operator aber normal... cout << *s; // X ... }
-
Danke erstmal, warum ist es beim std::string anders?
MfG
-
cpp@loggedoff@loggedoff schrieb:
Danke erstmal, warum ist es beim std::string anders?
MfG
ist es nicht. schau dir einfach mal s->size() nach der Zuweisung an.
-
cpp@loggedoff@loggedoff schrieb:
Danke erstmal, warum ist es beim std::string anders?
MfG
Ist es doch gar nicht, bei std::string benutzt du bei my_string[0] den op[] von std::string bei deiner Test Klasse bei my_test[0] den op[] deiner Test-Klasse. Passt doch.
-
#include <iostream> #include <vector> #include <string> using namespace std; class Test { vector<string> mask; public: string& Test::operator[](int index) { return mask[index]; } // ist für den Lesezugriff wichtig!!! const string& Test::operator[](int index)const{ return mask[index]; } }; int main() { Test* test = new Test(); // Dieser Ausdruck ist vom Typ 'Test' // Sollte aber vom Typ 'std::string' sein ?! test[0]; string* s = new string(); s->resize(10); s[0] = 'X'; // Hier funktioniert der Index- Operator aber normal... cout << *s; // X ... }
-
Achso ja na klar ich Depp, hier ...
s[0] = 'X';
... spricht man den String an, nicht einem Element davon.
THX,
MfG