Anfängerfrage
-
#include<iostream.h> typedef int Int ; class String{ public: String(){St = new char[2]; Len = 1;} String(const char* rhs){Len = strlen(rhs);St= new char[Len+1]; for(Int i(0); i<Len; ++i) {St[i] = rhs[i];}St[Len] = '\0'; } String(const String& rhs) {Len=rhs.GetLen(); St= new char[Len+1L]; for(Int i(0); i<Len; ++i){St[i] = rhs[i];} St[Len] = '\0'; } ~String() {Len =0;delete [] this->St;} operator char*() const {return St;} char& operator[](Int a)const { return St[a]; } String& operator=(const String rhs) {if(this==&rhs) {return (*this);} Len = rhs.GetLen(); delete[] St; St = new char[Len+1]; for(Int i(0); i<Len; ++i) {St[i] = rhs[i]; }St[Len] = '\0'; return (*this);} String& operator=( const char* rhs) {delete[]St; St= new char[Len+1]; Len = strlen(rhs); for(Int i(0); i<Len; ++i) {St[i] = rhs[i];} St[Len] = '\0'; return (*this); } Int GetLen() const {return Len;} private: char* St; Int Len; }; String aaa; void f(){ aaa = "<tr>\n" "<td align=\"center\">Mündlich</td>\n" "<td align=\"center\"> </td>\n" "<td align=\"center\"> </td>\n" "<td align=\"center\"> </td>\n" "<td align=\"center\">&nbbsp;</td>\n"; } int main() { f(); cout<<aaa; return 0; }Wollte mal versuchen, eine eigene Stringklasse zu schreiben..
Ich verstehe einfach nicht, warum es immer abstürzt
Ist wahrscheinlich ein ganz dummer Fehler
-
Mit was für einer Fehlermeldung stürzt er denn ab?
Ein paar kleinere Stolpersteine:
* formatier' den Code etwas besser (gerade die "St[Len]='\0';" am Zeilenende erschweren das Lesen).
* ist es Absicht, daß du im Copy-Ctor plötzlich long (1L) verwendest?
* der Inhalt eines Default-konstruierten Strings ist undefiniert.
* im operator=(const char*) solltest du erst die Länge berechnen und dann deinen Speicher reservieren.
-
Ich weiß der code ist nicht so toll, aber er müsste doch funktionieren.
Es ist keine Compiler Fehlermeldung, sondern das Programm stürzt zur Laufzeit mit
"xxx hat ein Problem festgestellt und muss beendet werden." ab.
-
du musst erst die länge errechenen dann speicher bereit stellen

bei deinem op = forderst du nur zwei byte anString& operator=( const char* rhs) { delete[]St; Len = strlen(rhs); St= new char[Len+1]; for(Int i(0); i<Len; ++i) {St[i] = rhs[i];} St[Len] = '\0'; return (*this); }[edit]
tags
-
CStoll schrieb:
* im operator=(const char*) solltest du erst die Länge berechnen und dann deinen Speicher reservieren.
^^ das da dürfte dein Problem sein: Du legst einen Speicher für zwei chars an (Len wurde im Default-Ctor auf 1 gesetzt) und versuchst anschließend, ca. 100 chars in diesen Bereich reinzuquetschen - damit schreibst du in einen Bereich, der dir nicht gehört (und den womöglich cout für sich reservieren wollte).
-
DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE
-
alwa schrieb:
typedef int Int ;Wäre doch eigentlich was für thedailywtf.

-
weiß zwar nicht was thedailywtf ist, aber typedef int Int habe nur gemacht, weil ich ne eigene int Klasse gemacht habe, die ich nicht mitkopieren wollte.
-
-
alwa schrieb:
weiß zwar nicht was thedailywtf ist, aber typedef int Int habe nur gemacht, weil ich ne eigene int Klasse gemacht habe, die ich nicht mitkopieren wollte.
Bloß als Vorschlag: Nenn deine Klassen nicht wie built-ins, das führt mit Sicherheit ins Chaos.
-
alwa schrieb:
weiß zwar nicht was thedailywtf ist, aber typedef int Int habe nur gemacht, weil ich ne eigene int Klasse gemacht habe, die ich nicht mitkopieren wollte.
War ja auch nicht böse gemeint, wirkte nur etwas komisch.
