Ich versuche, meinen eigenen Std :: string-Wrapper zu erstellen, um seine Funktionalität zu erweitern. Aber ich habe ein Problem bei der Deklaration der < < Operator. Hier ist mein Code so weit:Rückgabewert für eine << - Operatorfunktion einer benutzerdefinierten Zeichenfolgenklasse in C++
meine benutzerdefinierten String-Klasse:
class MyCustomString : private std::string { public: std::string data; MyCustomString() { data.assign(""); } MyCustomString(char *value) { data.assign(value); } void Assign(char *value) { data.assign(value); } // ...other useful functions std::string & operator << (const MyCustomString &src) { return this->data; } };
das Hauptprogramm:
int main() { MyCustomString mystring("Hello"); std::cout << mystring; // error C2243: 'type cast' : conversion from 'MyCustomString *' to 'const std::basic_string<_Elem,_Traits,_Ax> &' exists, but is inaccessible return 0; }
I cout die Klasse als std :: string behandeln wollte, so dass Ich brauche nichts zu tun wie:
std::cout << mystring.data;
Jede Art von Hilfe wäre willkommen!
Danke.
Nur fyi: meine IDE ist Microsoft Visual C++ 2008 Express Edition.
Ich bin Hinzufügen zu den anderen Antworten hier, der Grund, warum Sie eine freistehende (globale Funktion) brauchen, ist, weil der Typ des ersten Arguments ein 'std :: string 'oder ein beliebiger Typ sein muss, den Sie vor dem Operator' << 'haben wollen . – Skurmedel
...Das ist die einzige Möglichkeit, einen solchen Operator bereitzustellen, ohne die tatsächliche Klasse std :: string zu ändern. – Skurmedel