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 Variablenint 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
-
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; }
-
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.
-
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?
-
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.