Kopieren von int nach bool - Fehlermeldung



  • Liebe Freunde, ich versuche Werte von int nach bool zu kopieren:

    #include <iostream>

    using namespace std;

    int main()
    {
    // Anlage der Variablen

    int wertA[2];
    bool wertB[2];

    for (int wertA =0;wertA<2;wertA++)
    cout << wertA << endl;

    for(int schleife=0;schleife<2;schleife++)
    wertA[schleife] = wertB[schleife];

    cout << wertB[schleife] << endl;

    return 0;
    }

    Leider bekomme ich eine Fehlermeldung die ich nicht verwerten kann:

    \main.cpp|23|error: name lookup of 'schleife' changed for ISO 'for' scoping [-fpermissive]|

    ­čśí ich kann den Fehler nicht finden und bitte um Hilfe.

    Vielen Dank und viele Gr├╝├če

    Kai


  • Mod

    Deine Schleife endet in der Zeile mit der Zuweisung. Danach ist logischerweise auch die Schleifenvariable nicht mehr verf├╝gbar. Vielleicht m├Âchtest du mehrere Anweisungen mittels { } zu einem Block zusammen fassen? Ganz sicher m├Âchtest du aber von nun an stets Code-Tags f├╝r deine Beitr├Ąge mit Code benutzen.



  • Vielen Dank f├╝r die schnelle Reaktion, wo soll ich die Klammer setzen?



  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
    // Anlage der Variablen
    
    int wertA[2];
    bool wertB[2];
    
    {
    
        for (int wertA =0;wertA<2;wertA++)
            cout << wertA << endl;
    
            for(int schleife=0;schleife<2;schleife++)
                wertA[schleife] = wertB[schleife]
    
        cout << wertB[schleife] << endl;
    
        return 0;
    }
    

  • Mod

    Das sollte nicht compilieren.

    Hast du mal irgendeine Art von Anf├Ąngerbuch gelesen? for-Schleifen und Codebl├Âcke gehen Hand in Hand, das kann eigentlich kaum unerkl├Ąrt geblieben sein. Wenn du for-Schleifen kennst, sollte dir auch beigebracht worden sein, wie Codebl├Âcke funktionieren.

    Ohne gutes Lehrbuch, wirst du in C++ nicht weit kommen. Schlechte Lehrb├╝cher schaden sogar eher als dass sie nutzen.



  • Naja ich mache ein Fernstudium und teste halte das was ich so gelernt habe. Dabei sto├če ich auf Fehler und versuche diese zu l├Âsen, aber hier versuche ich schon eine ganze Weile und dachte mir hilft das Forum evtl. weiter.


  • Mod

    Hast du denn noch nie {} und for beieinander gesehen und kannst das auf dein PRoblem ├╝bertragen?



  • Ganz ehrlich habe ich nicht. For mache ich ohne {}. bei while und do while mache ich es, aber bei for hatte ich es noch nicht.

    Ich habe es ja auch nach deinem Tipp probiert mit Klammern, platziere diese aber scheinbar falsch.



  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
    // Anlage der Variablen
    
    int wertA[2];
    bool wertB[2];
    
        for (int wertA =0;wertA<2;wertA++){  <--
            cout << wertA << endl;
     } <--
    
            for(int schleife=0;schleife<2;schleife++){ <--
                wertA[schleife] = wertB[schleife]
          } <--
    
        cout << wertB[schleife] << endl;
    
        return 0;
    }
    

    Codebl├Âcke um die Zeilen die inherhalb der for-schleife ausgf├╝hrt werden sollen. (Markiert mit Pfeilen)
    Deine Variable schleife ist nur innerhalb des Blocks verf├╝gbar/sichtbar



  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
    // Anlage der Variablen
    
    int wertA[2];
    bool wertB[2];
    
        for (int wertA =0;wertA<2;wertA++){
            cout << wertA << endl;
     }
    
            for(int schleife=0;schleife<2;schleife++){
                wertA[schleife] = wertB[schleife];
          }
    
        cout << wertB[schleife] << endl;
    
        return 0;
    }
    

    Danke Axels. Ich habe es genaus so gemacht, bekomme aber weiterhin den Fehler:

    error: name lookup of 'schleife' changed for ISO 'for' scoping [-fpermissive]|

    Ein Semikolon habe ich noch gesetzt hinter wertA[schleife] = wertB[schleife];

    Aber es hilft nicht ­čś×



  • Das liegt daran, dass du auf schleife au├čerhalb der for-Schleife zugreifst.



  • Die Variable schleife ist nur innerhalb der for-Schleife g├╝ltig.
    (Du hast sie im ersten PArameter der for-Schleife definiert)

    Aber selbst wenn du diesen Fehler behebst, hat die Variable danach den Wert 2.
    Und dieser Index liegt au├čerhalb des Arrays.



  • Vielen Dank f├╝r die Unterst├╝tzung. Euch allen ein gesundes neues Jahr.

    Ich habe das Programm so weit ver├Ąndern k├Ânnen, dass es durchl├Ąuft:

    using namespace std;
    
    int main()
    {
    // Anlage der Variablen
    
    int wertA[2];
    bool wertB[2];
    
        for (int wertA =0;wertA<2;wertA++)
            cout << "Wert A: " << wertA << endl;
    
            for(int schleife=0;schleife<2;schleife++)
            {
    
             wertA[schleife] = wertB[schleife];
    
                cout << "Wert B: " << wertB[schleife] << endl;
    
            }
        return 0;
    

    Nun hatte ich mir erhofft, dass es die Werte von int 1:1 nach bool kopiert. Tut es aber nicht ­čś×

    Ich bekomme f├╝r Wert A 0 und 1. Das passt f├╝r mich.

    F├╝r Wert B bekomme ich nun aber 40 (???) und 0 zur├╝ck ­čś×

    Ich habe keine Ahnung warum. Kann man ├╝berhaupt von int nach bool kopieren? Ich dachte bool kann 0 und 1 sein und damit bin ich davon ausgegangen dass es auch kopiert werden kann. Ist dem nicht so? Oder warum bekomme ich so einen Mist zur├╝ck?

    Danke und Gr├╝├če



  • Schau dir Zeile 25 nochmal genau an.



  • using namespace std;
    
    int main()
    {
    // Anlage der Variablen
    
    int wertA[2];
    bool wertB[2];
    
        for (int wertA =0;wertA<2;wertA++)
            cout << "Wert A: " << wertA << endl;
    
            for(int schleife=0;schleife<2;schleife++)
            {
    
             wertB[schleife] = wertA[schleife];
    
                cout << "Wert B: " << wertB[schleife] << endl;
    
            }
        return 0;
    

    Okay habe es ge├Ąndert.

    Nun bekomme ich schon fast mein Wunschergebnis:

    A = 0
    A = 1
    B = 0
    B = 0(???)

    Warum hat B zweimal 0 und gar nicht 1? ­čś×


  • Mod

    Vollkommen undefiniertes Verhalten.

    Du kommst mit deinen mehrfach benutzten Namen durcheinander.



  • Der Compiler konvertiert schon implizit von int nach bool, wieso also der ganze Quatsch ├╝berhaupt. Bei diesem ganzen Thread geht mein Troll Alarm ab.

    #include <iostream>
    #include <limits>
    
    using namespace std;
    
    int main()
    {
        int wertA[5]{0, 3253425, 0, -12, std::numeric_limits<int>::max()};
        bool wertB[5]{};
    
        for (size_t i = 0; i < 5; ++i)
        {
            wertB[i] = wertA[i];
            cout << "Wert B: " << wertB[i] << '(' << wertA[i] << ")\n";
        }
        return 0;
    }
    

    When any scalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.

    output:

    Wert B: 0(0)
    Wert B: 1(3253425)
    Wert B: 0(0)
    Wert B: 1(-12)
    Wert B: 1(2147483647)
    

    Falls das kein Troll ist bitte die Einr├╝ckung im Vergleich zu deiner betrachten.


Log in to reply