Array übergeben, in Vector kopieren
-
Hallo zusammen,
folgendes Problem:
SFColor sfColors[2]; MFColor mfColor(sfColors); cout << mfColor.ToString() << "\n";liefert nur "[ ]" zurück. Warum???
Hier die anderen Klassen.
// MFColor MFColor::MFColor(SFColor value[]) { vector<SFColor> vec(value, value + (sizeof(value) / sizeof(value[0]))); this->value = vec; } string MFColor::ToString() { stringstream sstream; sstream << "[ "; vector<SFColor>::iterator iter = this->value.begin(); for(int i = 0; iter != this->value.end(); ++iter, ++i) { sstream << this->value[i].ToString() << ", "; } sstream << "]"; return sstream.str(); } // SFColor SFColor::SFColor(float r /* = 0 */, float g /* = 0 */, float b /* = 0 */) { this->SetValue(r, g, b); } void SFColor::SetValue(float r, float g, float b) { this->value[0] = r; this->value[1] = g; this->value[2] = b; } string SFColor::ToString() { stringstream sstream; sstream << this->value[0] << " " << this->value[1] << " " << this->value[2]; return sstream.str(); }Gruß
Patrick
-
Hallo,
die Größe Deines C-Arrays ist dem Konstruktor nicht bekannt. Deine Kopie klappt so also nicht. Du musst explizit die Größe mit übergeben.
Zusätzlich findet in Deinem Konstruktor ein unnötiger Aufruf des Kopierkonstruktors statt, den man durch das Verwenden einer Initialisierungsliste wegoptimieren kann:
MFColor::MFColor(SFColor value[], std::size_t len) : value(value, value + len) { }
-
Nachtrag: 'ToString' halte ich für eine schlechte Idee in C++. Hier wird jedes Mal ein neuer Stream erzeugt und zerstört. Es wäre sicher effizienter, die eingebaute Semantik über Streams zu verwenden, indem man 'operator <<' für 'std::ostream' überlädt.