Warning: there are no arguments to `setw' that depend on a template parameter,...



  • Hallo,

    Ich bekomme bei meinem G++ (aus CodeBlocks) folgende Warnung (bzw. Fehlermeldung)

    warning: there are no arguments to `setw' that depend on a template parameter, so a declaration of `setw' must be available

    Das bei folgenden Code

    template <class T>
    std::string val2string(const T val, const std::size_t width, const char fillchar) {
        std::stringstream strm;
        strm.fill(fillchar);
        strm << setw(width) << val;
        return strm.str();
    }
    

    Könnte mir einer sagen was das bedeutet.
    Ich habe zur Zeit durch Angabe von -fpermissive aus dem Fehler eine Warnung gemacht. So richtig gut finde ich das aber nicht.

    Ciao



  • Für die parametrisierten Manipulatoren (dazu gehört auch setw) benötigst du den Header <iomanip>.

    btw, Wertparameter benötigen kein const, um den Aufrufer zu schützen ;):

    template<typename T>
    std::string val2string(const T& val/*Referenz!!*/, size_t width/*size_t ist nicht in std*/,char fillchar)
    {
      //...
    }
    


  • CStoll schrieb:

    btw, Wertparameter benötigen kein const, um den Aufrufer zu schützen 😉

    Hilft aber, vor sich selbst zu schützen, wenn man nicht vorhat, den Wert in der Funktion zu verändern.



  • Das mit der Referenz auf val und size_t habe ich mal geändert.
    Das Einfügen von iomanip plus Hinzufügen von std:: vor setw hat dann geholfen.
    Ich hatte zuerst nur iomanip eingefügt und das hat nichts geändert. Da gibt es wohl setw noch einmal woanders.

    Danke


Anmelden zum Antworten