Da ich nicht std :: string für eine Zuweisung verwenden kann, verwende ich eine benutzerdefinierte Klasse namens CharString als Wrapper für die Fälle, wo ich es nicht selbst initialisieren kann.Operator >> für einen Char-Zeiger Wrapper
Die Klasse sieht wie folgt aus:
struct CharString {
char* str;
CharString() : str() {} // Initialize NULL
~CharString() { free(str); }
// Conversions to be usable with C functions
operator char**() { return &str; }
operator char*() { return str; }
};
aber ich folgende Fehlermeldung erhalten, wenn i >> auf sie verwenden möchten.
binary '>>': no operator found which takes a right-hand operand of type 'utils::CharString' (or there is no acceptable conversion).
Wie ich den Bediener >>
überlasten?
CharString operator>>(std::istream& is) {
is >> str;
return *this;
};
Ich versuchte das oben, aber das gibt mir immer noch den gleichen Fehler.
Ich nehme an, dass ich dies in meine CharString-Struktur einfügen muss, aber das gibt mir auch Fehler: 'kann Funktionen, die durch return type alone 'nur bei Verwendung von istream oder' zu vielen Parametern für diese Operatorfunktion' nicht überladen werden, wenn ich beide Parameter verwende . – IMarks
Dies sollte eine Friend-Funktion und nicht eine Member-Funktion sein. Stellen Sie sicher, dass Sie es außerhalb Ihrer Klasse deklarieren, und fügen Sie dann innerhalb der Klasse eine Friend-Deklaration hinzu. – templatetypedef