Ergebnis 1 bis 3 von 3

Thema: operator+ und struct klappt nicht

  1. #1
    uhsuhs33
    Gast

    Standard operator+ und struct klappt nicht

    Also ich habe jetzt eine Zeit lang C gemacht und gehe jetzt zu C++ über, und jetzt wollte ich ne Headerdatei schreiben, die nen string speichern kann und mit dem ich ganz leicht operationen ausführen kann wie zuweisung mit dem =-operator.

    Nun habe ich zuerst ne struktur gemacht (bin noch nicht bei klassen), die ein array von 100 char speichert, die zahl spielt hier eigentlich keine rolle. Als ich nun versucht habe den zuweisungsoperator zu überladen habe ich nur ne fehlermeldung bekommen:

    Code:
    string operator=(string &x)
    -->'operator ={string &}' must be a nonstatic member function

    ok, dann habe ich bei google gesucht und ein beispiel gefunden, indem der =-opertator in der struktur eingebaut war, das habe ich dann mal implemetiert und das habe ich nur:

    Code:
    struct string
        {
        char zeichen[100];
        string operator=(string &x) 
            {
            string y;
            for&#40;int i = 0; i < 100; i++&#41;
                    &#123;
                    if&#40;x.zeichen&#91;i&#93; == 0&#41;
                                    break;
                    y.zeichen&#91;i&#93; = x.zeichen&#91;i&#93;;
                    &#125;
            return y;
            &#125;
        string operator=&#40;char *x&#41;
            &#123;
            string y;
            for&#40;int i = 0; i < 100; i++&#41;
                    &#123;
                    if&#40;x&#91;i&#93; == 0&#41;
                                    break;
                    y.zeichen&#91;i&#93; = x&#91;i&#93;; 
                    &#125;
            return y;
            &#125;
        &#125;;
    
    Doch jetzt funktionniert die return methode nicht richtig, wenn in der überladung des zuweisungsoperator ne andere funktion aufrufe gibt es kein problem, doch die string-struktur zurückgeben an die main wird besteht sie nur noch aus 12 komischen zeichen die nicht dahingehören
    
    
    Ich hoffe ihr könnt mir helfen
    
    Danke  &#58;D
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Hallo,
    also erstmal:
    zwischen struct uns class ist fast kein Unterschied, außer dass bei struct alles Standardmäßig für andere Funktionen und Klassen öffentlich zugänglich ist.

    Du solltest deine Klasse (struct, ich sag halt Klasse) lieber nicht String nennen, denn es existiert bereits der Bibliothekstyp std::string und Benutzer, die using namespace std;, was die Angabe von std:: überflüssig macht, angeben, könnte das verwirren.

    Auf jeden Fall sollte aus Kompatiblitätsgründen der operator= so aussehen:
    Code:
    stringclass& operator=&#40;stringclass& x&#41;
    &#123;
    ...
    return *this;
    &#125;
    Ein weiteres Problem ist:
    Wenn du den Rückgabetyp jetzt als Referenz gestaltest, würdest du mit return y; eine Referenz auf ein temporäres Objekt zurückgeben, nach der Rückgabe wäre das Objekt sofort weg.
    Mit dem operator= möchtest du ja außerdem auch nicht einen neuen stringclass mit den Werten füllen, sondern du möchtest das Objekt, für das der Operator aufgerufen wird füllen, also den linken Wert beim operator=.
    Also lass dieses y vollkommen sein und setze einfach zeichen[i] = x.zeichen[i], das bezieht sich dann implizit auf das Objekt, das vor dem = steht.

    Ich schreibs am besten nochmal hin:
    Code:
    stringclass& operator=&#40;stringclass &x&#41;
            &#123;
            for&#40;int i = 0; i < 100; i++&#41;
                    &#123;
                    if&#40;x.zeichen&#91;i&#93; == 0&#41;
                                    break;
                    zeichen&#91;i&#93; = x.zeichen&#91;i&#93;;
                    &#125;
            return *this;
            &#125;

  3. #3
    uhsuhs33
    Gast

    Standard

    Danke für die schnelle hilfe, ich musste nur noch kleinigkeiten hinzufuegen und dann klappte es, ich musste noch den terminator hintendranschieben, dann kommen die komischen zeichen nicht mehr

    So sieht die Struktur jetzt aus:

    Code:
    struct stringclass
        &#123;
        char zeichen&#91;100&#93;;
        stringclass& operator=&#40;stringclass &x&#41; 
            &#123;
            for&#40;int i = 0; i < 100; i++&#41; 
                    &#123; 
                    if&#40;x.zeichen&#91;i&#93; == 0&#41; 
                                    &#123;
                                    zeichen&#91;i&#93; = 0;
                                    break;
                                    &#125;
                    zeichen&#91;i&#93; = x.zeichen&#91;i&#93;;
                    &#125; 
            return *this; 
            &#125; 
        stringclass& operator=&#40;char *x&#41;
            &#123;
            for&#40;int i = 0; i < 100; i++&#41;
                    &#123;
                    if&#40;x&#91;i&#93; == 0&#41;
                                    &#123;
                                    zeichen&#91;i&#93; = 0;
                                    break;
                                    &#125;
                    zeichen&#91;i&#93; = x&#91;i&#93;;
                    &#125;
            return *this;
            &#125;
        &#125;;
    [/quote]

Ähnliche Themen

  1. anmeldung klappt nicht
    Von tim im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 07.09.2007, 21:34
  2. Funktionsaufruf klappt nicht!
    Von woercel im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 2
    Letzter Beitrag: 04.08.2005, 02:09
  3. Funktionsaufruf klappt nicht
    Von woercel im Forum HTML & CSS Forum
    Antworten: 1
    Letzter Beitrag: 21.07.2005, 16:25
  4. Hilfe - das klappt so nicht
    Von Minksi im Forum HTML & CSS Forum
    Antworten: 4
    Letzter Beitrag: 15.07.2005, 17:13
  5. wieso klappt das nicht
    Von Lion im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 27.03.2005, 22:04

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •