Sie hinzufügen können, nichts zu POINTER, Zeiger zeigt sich nur bis zu einem gewissen Speicher schreiben kann. Sie müssen zuerst eine Instanz haben, wie in Ihrem zweiten Beispiel String temp[3];
erstellen Sie drei Instanzen von String
.
So String temp;
wird schaffen lokale Instanz von String
, dann ist es Zeiger erhalten Sie String * tempPtr = &temp;
verwenden können, aber ich sehe nicht, warum Sie das wünschen würde, wie Sie temp
können wie verwenden können ... wie temp.clear();
oder was auch immer Funktionen Die Klasse String
hat (siehe API).
Bearbeiten über zurückgeben Stringzeiger.
Das ist eine Art unglücklicher C++ API-Design. Wer wird die Erinnerung an diese Instanz besitzen?
Zum Beispiel:
String* SomeClass::toArray(String str) {
String result;
// BUG, DO NOT DO THIS!
return &result; // returns pointer to local stack variable
// which gets released *here*, invalidating the pointer
}
String* SomeClass::toArray(String str) {
String *result = new String;
return result; // returns pointer to global heap
// now if the upper layer of code will not call "delete" on it
// you have memory leak
}
BTW, aus dem "toArray" name sieht es aus wie Sie Array von String-Instanzen wollen, nicht String-Zeiger. So sollten Funktionen eher als String[] SomeClass::toArray(String str)
definiert werden, immer noch das gleiche Problem mit Speicherbesitz.
Was ich tun würde ist nicht ein Array zurückgeben. vielleicht void SomeClass::toArray(const String & str, std::vector<String> & array)
, füllen Sie die Daten in array
Vektor.
Ich weiß nicht, wie viel Sie C++ verwenden, auf Arduino, wenn std :: vector in Ordnung ist, oder nicht, aber für String eine Klasse mit fühlt sich an wie Vektor <> auch in Ordnung sein wird, vor allem, wenn Sie Ihren Stack verschwenden indem Sie die Instanz von String anstelle von Referenz kopieren.(es sei denn String
ist einige Makro/typedef für char[]
, bitte, sag mir nicht, dass ... Ich meine, sogar C++ kann in geringem Speicherbedarf geschrieben werden, Sie müssen Arrays nicht überall fest verdrahten, wenn Sie unnötige vermeiden Zuweisung von temporären Instanzen von C++ - Klassen).
Was ist String? –
Ich wollte die gleiche Frage stellen. Aber wie Sie sehen, hat die Frage Arduino-Tag. String ist ein Objekt der Arduino-Sprache, das auf C oder C++ basiert, aber mit keinem von beiden identisch ist –