std::queue class->struct->union. struct nicht vorhanden?



  • Hallo,

    ich hab ein Problem das ich nicht verstehe.
    Ich hab ne Klasse "Test" mit einem Struct "teststr" und verwende union mit dem struct.

    #include <queue>
    
    class Test
    {
    struct teststr
    {
    bool test;
    };
    
    union
    {
    teststr size;
    };
    };
    

    In der main möchte ich das "Test" Object mit queue verwenden.

    std::queue<Test>    m_tests;                     ///< Queue of available tests
        Test test1;  //test1.teststr.test ist null/leer????
        Test test2; //test2.teststr.test ist null//leer ??
    

    Das Problem ist dass test1.teststr.test leer ist.

    wenn Test test1; vor queue, dann test1.teststr.test gefüllt.

    Test test1;  //.teststr.test is filled !!
    std::queue<Test> m_tests;                     ///< Queue of available tests
    Test test2; //test2.teststr.test is filled !!
    

    meine frage:
    wieso ist das struct teststr nicht initialisiert bzw. gesetzt wenn:

    std::queue<Test> m_tests;                     ///< Queue of available tests
    Test test1;  //test1.teststr.test is null/empty????
        Test test2; //test2.teststr.test is null//empty ??;
    


  • Und wie stellst du fest, dass eine bool-Variable "leer" ist?



  • Im Debugger?
    `
    so sollet es aussehen? tut es auch wenn test1 vor queue ....

    -		test1	{test2=true size={...} }	Test
    		test2	true	                        bool
    -		size	{test=true }	                Test::teststr
    		test	true	                        bool
    

    so sollte es nicht aussehen? wenn test1 nach queue ....

    -		test1	{test2=true size=??? }	Test
    		test2	true	                bool
    		size		                Test::teststr
    

    size scheint hier nicht zu existieren?


  • Mod

    wirr.

    test1.teststr.test
    

    Was soll das sein?
    Es gibt test1.size.test oder Test::teststr::test



  • Es gibt test1.size.test oder Test::teststr::test

    sry, ja das meinte ich 🙂 das scheint es nicht zu geben?



  • so hab heut mal mit nem Arbeitskollege gesprochen der viel mit C++ macht.
    Er meinte auch dass

    test1.size.test
    

    true oder false sein müsste ....

    Mehrmals getestet .....

    Screenshot als Beweis ....

    http://www.freeimagehosting.net/t/aclac.jpg



  • Eine bool-Variable ist immer entweder true oder false. Wenn dein Debugger dir etwas anderes anzeigt, spinnt er entweder oder du dir dein Programm mit fehlerhaften Speicherzugriffen zerschossen, so dass der Debugger das Chaos nicht mehr entwirren kann.



  • das codeschnipsel in der Reihenfolge

    std::queue<Test>    m_tests;                     ///< Queue of available tests
        Test test1;  //test1.teststr.test ist leer????
        Test test2; //test2.teststr.test ist /leer ??
    

    ausprobiert?

    was will ich mir da zerschießen bei fast 0 Zeilen Code? Das gleiche verhalten bei mir zuhause und im geschäft.... 😕



  • Der Debugger kann's halt nicht, na und? Schreib doch erstmal korrekten Code und dann schau weiter. 😉



  • ja gerade mit nem zusätzlichen integer und ner konsolenausgabe getestet ...

    Scheint wohl an Visual Studio 2010 zu liegen ....

    @Eisflamme und was genau meinst du damit? Soviel falsch kann da ja nicht sein, oder doch? 🙂



  • XBog: Wo initialisierst du denn ein (hier: dein einziges) Member deiner Union? Nirgends? Na dann Fehler gefunden.

    Regel Nummer 1 beim Verwenden von Unions: Du machst es falsch.



  • Wo initialisierst du denn ein (hier: dein einziges) Member deiner Union? Nirgends? Na dann Fehler gefunden.
    Regel Nummer 1 beim Verwenden von Unions: Du machst es falsch.
    

    Danke für den Hinweis! 😃


  • Mod

    Ich verstehe immer noch nicht, welches Problem eigentlich vorliegen soll.
    Weder gibt es brauchbaren Code, noch eine vernünftige Fehlerbeschreibung.


Anmelden zum Antworten