Operatorenüberladung und/oder automatische Typenumwandlung



  • vielleicht auch nur ein copy&paste fehler: ein semikolon nach dem ersten operator=



  • @ Jester:

    Hab ich auch schon probiert....:

    NLStream(const char *szString)
      {
        this->SetAlloc(1024,1024);
        this->Store((char*)szString,strlen(szString)+1);
      }
    

    useful.cpp(29) : error C2664: '__thiscall NLStream::NLStream(int,int)' : cannot convert parameter 1 from 'char [4]' to 'int'
    This conversion requires a reinterpret_cast, a C-style cast or function-style cast

    @ davie: Ja leider bloß ein Paste-Fehler, weil ich den Body in die Definition kopiert hatte..

    gruß



  • Er scheint diesen Konstruktor hier aufzurufen:

    NLStream(int iSize = 1024,int iReAlloc = 1024);
    

    Steht ja auch schon im Fehler, daß beim Aufruf von NLStream(int,int) die Typenumwandlung nicht stattfinden konnte.

    Und wozu hast Du den eigentlich? Selbst wenn er aufgerufen würde, wäre dort nicht einmal weiterer Code, der ausgeführt werden würde...



  • Doch den Code hatte ich bloß nicht gepostet, da der eigentlich funktioniert...

    NLStream::NLStream(int iSize,int iReAlloc)
    {
      this->SetAlloc(iSize,iReAlloc);
    
      m_iPos = 0;
      m_bBrother = false;
      OnBlowfish = NULL;
    }
    

    Also der Standardkonstruktor funktioniert.., aber halt nicht der spezielle für char * 😞

    gruß



  • Nur du siehst ja an der Fehlermeldung, daß er eindeutig den Falschen Kostruktor aufruft...

    Hast Du schon einen

    NLStream(const char * szString)
    

    ausprobiert?
    Immerhin gilt dieser Text zwischen den "" Ja als literal(?)-konstante wenn ich mich recht entsinne!



  • hmm literal sagt mir im Moment gar nichts...

    also ich hab jetzt mal:

    ...
      char szStr[]="bla";
      const char *pStr = szStr;
    
      NLStream stream(pStr)
    ...
    

    selber Fehler.. Desweiteren würde ich das auch gerne so implementieren können, dass ich den CTor mit NLStream("bla") aufrufen kann....

    gruß



  • Arggggggggggghs... Hat sich erledigt... Ein programmiertechnisch unabhängeriger Fehler von mir 😃

    also funktioniert jetzt alles eine letzte Frage hätte ich noch...

    NLStream &operator+=(NLStream &pStream)
      {
        this->Store(pStream.m_acData,pStream.m_iSize);
        this->SetEnd();
        return (*this);
      }
    

    für

    NLStream stream("bl"),
             sndstream("ah");
    
    stream+=sndstream;
    

    hab ich allerdings Zeiger muss ich:

    NLStream *stream = new NLStream("bl"),
                  *sndstream = new NLStream("ah");
    
    (*stream)+=(*sndstream);
    

    schreiben.

    Kann ich jetzt noch irgendwas überladen, um mir das Referenzieren der Pointer zu sparen ??

    gruß



  • Nein.



  • Nstream &operator += (Nstream *a, Nstream *b) { return *a+=*b; }



  • davie schrieb:

    Nstream &operator += (Nstream *a, Nstream *b) { return *a+=*b; }

    Obfuscated C++?



  • Wieso? Eine der wenigen guten Merkmale der C++ Syntax, ist die Möglichkeit sich kompakt auszudrücken.

    (soll man natürlich nicht übertreiben, aber hier ist es doch eindeutig)



  • Shade: ja, da sollte man drauf hinweisen.



  • Wie meinst du das?

    Mal was anderes, wozu muss man das überhaupt erst extra schreiben? Der Compiler könnte das doch automatisch generieren, wenn man eh schon '+' definiert hat.



  • ich mein nur, dass (ein code sagt mehr als 1000 worte)

    NLStream *x = new NLStream, &y = *x; //kurz und bündig
    //folgendes:
    NLstream foo(x += &y);
    

    das ist nicht, was man erwartet.


Anmelden zum Antworten