static_cast Warnung



  • Hallo,

    folgende Zeile Code:

    intResultValue = isInt( vectorConvert[i] ) * ( pow( doubleBase, static_cast<double>(vectorConvert.size( ) - i - 1 ) ) );

    Kurze Erklärung:
    isInt: ist eine selbst geschriebene Funktion, die einen Intwert zurückgibt.
    (siehe vectorConvert: gibt den intwert des übergebenen strings zurück (bei "9" gibt es den int wert 9 zurück, bei "6" 6, usw.)

    vectorConvert[i]: ist ein <string> vector. Das Element enthält strings - allerdings ist in jedem Element nur eine "Zahl" von 0-9.

    doubleBase = eine Variable vom typ double

    Der Rest dürfte klar sein.

    Mein Problem: Ich bekomme sowas:

    /usr/lib/flib/fapplication.cpp:388: warning: assignment to `int' from `double'
    /usr/lib/flib/fapplication.cpp:388: warning: argument to `int' from `double'

    Wobei die beschriebene zeile die Zeile 388 ist.
    Es sind ja nur Warnungen. Das Programm funktioniert einwandfrei. Das Problem: An anderen Stellen im Sourcecode caste ich auch und bekomme dort keine Warnungen. Wieso bekomme ich hier Warnungen? Ist das irgendwas faul?

    Danke schonmal



  • mir fällt da zwar jetz nix konkret auf (ausser vielleicht dynamishc casten). aber wie wärs mit einenm einfachen

    ...(double)(wert)...
    // statt
    ...static_cast<double>(wert)
    

    mal btw: was macht die funktion überhaupt, und was ist flib (nur interessehalber ;))



  • intResultValue = isInt( vectorConvert[i] ) * ( pow( doubleBase, static_cast<double>(vectorConvert.size( ) - i - 1 ) ) );
    

    Du schreibst:

    int = int * double.
    Darauf wird:

    int = double. (int * double == double).

    Also versuch mal das gesammtergebnis nach int zu casten oder das ergebnis von pow.



  • ChristianCgi schrieb:

    ...
    An anderen Stellen im Sourcecode caste ich auch und bekomme dort keine Warnungen. Wieso bekomme ich hier Warnungen? Ist das irgendwas faul?

    Danke schonmal

    Hast du an den anderen Codestellen das Ergebnis auch einer int-Variablen
    zugeordnet?

    Wuerde eigentlich darauf tippen, dass dir der Compiler sagen will, dass es evtl.
    nicht gewollt ist dass ein double einem int zugewiesen wird, da ja die
    Nachkommastellen verloren gehen.

    mfg
    v R



  • Korbinian schrieb:

    ...(double)(wert)...
    // statt
    ...static_cast<double>(wert)
    

    Sind das nicht alte C-Casts, die man (zumindest laut Struppi) vermeiden sollte?

    gruß,
    walker



  • walker schrieb:

    Sind das nicht alte C-Casts, die man (zumindest laut Struppi) vermeiden sollte?

    jo,
    (double)foo
    und
    double(foo)
    sind böse

    static_cast<double>(foo)
    ist lieb, brav und nett



  • Die Antwort wurde ja bereits gegeben (Gesammtergebnis nach int casten), aber findest du, das 'isInt' ei Passender Name für eine Konvertierung ist? is... hört sich immer nach Frage an.



  • Shade Of Mine schrieb:

    jo,
    (double)foo
    und
    double(foo)
    sind böse

    static_cast<double>(foo)
    ist lieb, brav und nett

    double(foo) ist ja nichts anderes als static_cast<double>(foo).
    Siehe Struppi §6.2.8 ("Für einen eingebauten Typ ist T(a) äquivalent zu static_cast<T>(a).")

    gruß,
    walker



  • walker schrieb:

    double(foo) ist ja nichts anderes als static_cast<double>(foo).
    Siehe Struppi §6.2.8 ("Für einen eingebauten Typ ist T(a) äquivalent zu static_cast<T>(a).")

    da irrt sich der Struppi aber.

    expr.type.conv schrieb:

    [..]
    [Note: if T is a non-class type that is cv-qualified, the cv-qualifiers are ignored when determining the type of the resulting rvalue.]

    Für Class Typen passt der functionstyle cast wieder, da hier der Ctor aufgerufen wird..



  • Vielen Danke. Ich habe das Ergebnis von pow einfach nach int gecasted. Mein Fehler - hätte ich selbst bemerken sollen.

    Gruss und viel Spass beim diskutieren 😉



  • Shade Of Mine schrieb:

    da irrt sich der Struppi aber.

    Verdammt, ich dachte immer, wenigstens auf die Bibel könnte man sich verlassen 🙂


Anmelden zum Antworten