gleichnamige globale Variablen



  • Hallo zusammen

    Ich habe ein Frage, und es geht nicht darum das ich unbedingt Globale Variablen einsetzen will, mehr ums verstehen ...

    #include <iostream>
    
    int test =4
    
    int mein()
    {
    float test =2.2
    std::cout<<test<<"\n";       //gibt 2.2 aus
    std::cout<<::test<<"\n";     //gibt 4   aus
    ::test=test + 2;
    std::cout<<::test<<"\n";     //gibt 6   aus
    return 0;
    }
    

    Warum erkennt er in Zeile 10 das "test" als die globale Variable ... weil ich vorher ::test= ... geschrieben habe?

    Und wie kann ich ihm sagen das er die nicht globale Variable nehmen soll, ergo ::test dann 4,2 ist?

    Ich will so eine Sünde nicht in meinem Programm einbauen, bin nur bei einem Tutorial darüber gestolpert, und Frage mich jetzt, warum das so ist. Da haben die Schweine mich nämlich alleine gelassen XD



  • Was bedeuten denn die :: ?



  • 1. Du meinst wohl "int main()" nicht "int mein()" 😉
    2. Über "::" vor der Variable wählst du die Globale.

    evd schrieb:

    Und wie kann ich ihm sagen das er die nicht globale Variable nehmen soll, ergo ::test dann 4,2 ist?

    "::test" IST hier die globale Variable, nimm die beiden Doppelpunkte weg, dann klappt es auch wie gewünscht.

    evd schrieb:

    ...Ich will so eine Sünde nicht in meinem Programm einbauen, bin nur bei einem Tutorial darüber gestolpert, ...

    Du solltest das Tutorial dennoch wegschmeißen. Ich wüsste auch kein einziges gutes für C++.



  • evd schrieb:

    Und wie kann ich ihm sagen das er die nicht globale Variable nehmen soll, ergo ::test dann 4,2 ist?

    ::test auch als float deklarieren?



  • Ich glaube der TO hat schon verstanden, dass bei :: die globale Variable genommen wird. Das merkwürdige scheint ja zu sein, dass er bei "::test=test + 2" für beides mal die globale Variable nimmt, sodass 6 raus kommt. Ich habs das hier gerade mal in gcc 4.4 und 4.9 getestet und tatsächlich kommt bei der letzten Ausgabe bei mir 4 raus (was ja 4,2 abgerundet ist). Wenn ich die globale Variable auch als float deklariere kriege ich 4,2. Darf man fragen welchen Compiler du benutzt? Wenn bei dir wirklich 6 ausgegeben wird klingt das stark nach einem Compilerfehler.



  • danke, hat mir sehr geholfen 🙂

    ich habe das umwandeln in ein Float vergessen XD
    und... auch... anderes ... sorry ^^

    evd schrieb:

    #include <iostream>
    
    int test =4
    
    int mein()
    {
    float test =2.2
    std::cout<<test<<"\n";       //gibt 2.2 aus
    std::cout<<::test<<"\n";     //gibt 4   aus
    ::test=test + 2;
    std::cout<<::test<<"\n";     //gibt 6   aus
    return 0;
    }
    

    Bei Zeile 11 habe ich mich vertippt, gibt 4 aus, nicht 6.

    Wenn ich es umwandle dann kommt wie gewünscht 4.2

    nochmal danke 🙂


Anmelden zum Antworten