nicht-konstante funktion fuer konstantes object aufgerufen



  • hola leute

    folgende warnung bekomme ich beim kompilieren angezeigt(BCB6):

    nicht-konstante funktion fuer konstantes object aufgerufen

    mal bissl code
    die header datei:

    class TxlString
    {
       private:
          inline unsigned int& BufferSize(void);
          inline unsigned int& StringLen(void);
          inline char* Buffer(void);
          inline void Xalloc(char *t_buffer,unsigned int t_size);
    
          char *buffer;
    
       public:
          inline TxlString(void);
          inline TxlString(const TxlString &t_string);
          inline TxlString(const char *c_string);
          inline TxlString(const unsigned short t_size);
          inline ~TxlString(void);
    
          inline unsigned int GetBufferSize(void);
          inline unsigned int GetStringLen(void);
    };
    

    jetz die cpp datei:

    inline TxlString::TxlString(void) : buffer(0)
    {
    
    }
    
    inline TxlString::TxlString(const TxlString &t_string)
    {
       int unsigned t_size = t_string.GetStringLen();              // (1)
       Xalloc(buffer,BufferSize() = (StringLen() = t_size) + 1);
    }
    
    inline TxlString::TxlString(const char *c_string)
    {
    
    }
    
    inline TxlString::~TxlString(void)
    {
       if(buffer)
          free(buffer);
    }
    ...
    

    in zeile (1) is das problem mit GetStringLen().
    wie muss ich das machen damit die warnung verschwindet ?

    Meep Meep



  • Hallo,
    wie wär's wenn du getStringLen einfach als const deklarieren würdest? Schließlich ändert diese Methode nicht den logischen Zustand deines String-Objekts (das wäre wirklich sehr sehr unangebracht).



  • Möglicherweise läßt Du Dir irgendwo
    ein Objekt vom Typ TxlString als const ausliefert.

    Zum Beispiel:

    const TxlString& FooBar::getString() const;
    

    Ein Aufruf von

    FooBar myObj;
      const TxlString& myString = myObj.getString();
      unsigned int length = myString.GetStringLen();
    

    führt dann zu einem Fehler während des Compilierens.

    Du könntest vielleicht auch Deine Funktion GetStringLen()
    als const deklarieren. Also so z. B.:

    inline unsigned int GetStringLen() const;
    

    Das hängt aber davon ab, was Du in GetStringLen() so treibst.

    Gruß

    H.-Gerd

    http://www.brainsandbytes.de



  • Balrog schrieb:

    Das hängt aber davon ab, was Du in GetStringLen() so treibst.

    Bitte? Also wer in GetStringLen einer Stringklasse etwas macht, was den *logischen* Zustand des Stringobjekts ändert, der gehört eindeutig verkloppt.



  • Klar, Deiner Meinung kann ich mich eigentlich nur anschließen.
    Aber ich hab' den Eindruck, dass hier im Forum viele unterwegs
    sind, die noch ein bißchen üben müssen...

    Gruß

    H.-Gerd

    http://www.brainsandbytes.de



  • @Balrog
    Naja, in meinem letzten Posting fehlt auch ein 😉
    Ich wollte nur zum Ausdruck bringen, dass der OP a) GetStringLen auf jeden Fall const deklarieren sollte und b) sich dringend mit const-correctness beschäftigen sollte, falls nicht klar sein sollte warum.


Anmelden zum Antworten