Kann funktion trotz include nicht finden
-
Jo, Vielen Dank,
ich benutze an und an cout zum debuggen, deswegen binde ich das überall ein. Aber ich merke gerade, dass das mit dem Debugger wesentlich, einfacher ist

apropos: Gerade bin ich voll dabei und es gibt da eine Sache(wesentlich mehr=), die ich nicht verstehe
#include "step.h" using namespace std; void step(int wordpos) { extern tabelle stepArray[10]; const int ct = 2; bool ctrl; for (int i=stepArray[wordpos].iStep; i<=8; ++i) { switch(i) { case 1: if (stepArray[wordpos].y-1 >= 0) { ctrl = ctrlStAr(0,-1, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x; int y = stepArray[wordpos].y-1; stepArray[wordpos].iStep = i; routine(x,y,wordpos); } } else { break; } case 2: if ((stepArray[wordpos].x+1 <= ct)&&(stepArray[wordpos].y-1 >= 0)) { ctrl = ctrlStAr(+1,-1, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x+1; int y = stepArray[wordpos].y-1; routine(x,y,wordpos); } } break; case 3: if (stepArray[wordpos].x+1 <= ct)/*&&(stepArray[wordpos].y >= 0)*/ { ctrl = ctrlStAr(+1,0, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x+1; int y = stepArray[wordpos].y; routine(x,y,wordpos); } } break; case 4: if ((stepArray[wordpos].x+1 <= ct)&&(stepArray[wordpos].y+1 <= ct)) { ctrl = ctrlStAr(+1,+1, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x+1; int y = stepArray[wordpos].y+1; routine(x,y,wordpos); } } break; case 5: if /*((stepArray[wordpos].x+1 <= ct)&&*/(stepArray[wordpos].y+1 <= ct) { ctrl = ctrlStAr(0,+1, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x; int y = stepArray[wordpos].y+1; routine(x,y,wordpos); } } break; case 6: if ((stepArray[wordpos].x-1 >= 0)&&(stepArray[wordpos].y+1 <= ct)) { ctrl = ctrlStAr(-1,+1, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x-1; int y = stepArray[wordpos].y+1; routine(x,y,wordpos); } } break; case 7: if (stepArray[wordpos].x-1 >= 0)/*&&(stepArray[wordpos].y-1 >= 0))*/ { ctrl = ctrlStAr(-1,0, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x-1; int y = stepArray[wordpos].y; routine(x,y,wordpos); } } break; case 8: if ((stepArray[wordpos].x-1 >= 0)&&(stepArray[wordpos].y-1 >= 0)) { ctrl = ctrlStAr(-1,-1, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x-1; int y = stepArray[wordpos].y-1; routine(x,y,wordpos); } } break; } } };bei break, springt er nicht aus switch raus in die schleife zurück sondern, geht einfach auf die nächste case-Bedingung zu, obwohl ich da break; stehen habe

greet johnc.
-

Sorry, aber der Code ist ja grausig !!Mein Tipp als Erstes: Lege im switch-Block nur fest, ob und mit welchen Offsets später routine() aufgerufen werden soll und mache den Aufruf nach dem Block.
Gruß,
Simon2.
-
jo, aber break; ignoriert er ja trotzdem

-
In der ersten case Anweisung benutz du if:
if(...) //kein break; fehler else break;Kommt diese fehler immer noch
ctrlStepArray.obj : error LNK2005: "class datenbank db" (?db@@3Vdatenbank@@A) already defined in racer_main.obj
-
Jo, das hatte ich nur zum ausprobieren.
ich versteh nicht warum das nicht geht
Egal was ich machen, er springt immer weiter zu case 2
Nee die ganzen linkerfehler sind jetzt weg(dank extern), VielenDank!!! dafür

greetz johnc.
-
case 1: if (stepArray[wordpos].y-1 >= 0) { ctrl = ctrlStAr(0,-1, wordpos); if (ctrl == false) { int x = stepArray[wordpos].x; int y = stepArray[wordpos].y-1; stepArray[wordpos].iStep = i; routine(x,y,wordpos); } } break; // break am ende case 2: if ((stepArray[wordpos].x+1 <= ct)&&(stepArray[wordpos].y-1 >= 0))
-
So hatte ich das ursprünglich, er springt aber dennoch zu case 2 ohne zur schleife zu kommen

greetz johnC++
-
so hab jetzt in vc++ 2008 neues projekt gelegt, die dateien einfach reinkopiert, und siehe da es geht

ich hab einfach nur dei dateien ins projekt "geaddet".
greetz johnC++
-
oh dann muss der fehler hier liegen.
i++for (int i=stepArray[wordpos].iStep; i<=8; i++)
-
Ramsis schrieb:
oh dann muss der fehler hier liegen.
Sorry, aber das ist Schwachsinn und mit 100% Sicherheit nicht das Problem... Und davon abgesehen ist im Zweifel ++i immer i++ vorzuziehen. Dazu gibt es aber einen eigenen Thread.
cu André
-
asc schrieb:
Sorry, aber das ist Schwachsinn und mit 100% Sicherheit nicht das Problem... Und davon abgesehen ist im Zweifel ++i immer i++ vorzuziehen. Dazu gibt es aber einen eigenen Thread.
1. Naja werden wir sehen!
2. Das ist ein C Array, diese beiden operatoren werden von Compiler
bereitgestellt ( ++i und i++ ), die anderen die du meinst sind die überladene
Operatoren der STL ( std::vector, std::map, ... ), dort gilt was du gesagt hast,
bei C Arrays ist es ein bischen anders.
-
zu 2.
i ist kein Array, i ist ein Integer. Und was hat das eine mit dem anderen zu tun?zu 1.
Begründe doch bitte mal wieso der Fehler bei i++ liegt.
-
Ramsis schrieb:
die anderen die du meinst sind die überladene
Operatoren der STL... Wo sind hier Beim Inkrement/Deinkrement überladene Operatoren der STL (oder wo bitte ist hier das Thema STL gefallen)? Und das i kein Array ist, wurde ja auch schon erwähnt.
cu André
-
Hab gerade ausprobiert, du hattest recht.

Diese beiden for schleifen machen genau das gleiche.#include <iostream> using namespace std; int main(void) { for( int i = 0; i<=4; i++) { switch(i) { case 0: cout << "case 0" << endl; break; case 1: cout << "case 1" << endl; break; case 2: cout << "case 2" << endl; break; case 3: cout << "case 3" << endl; break; case 4: cout << "case 4" << endl; break; } } cout << endl << endl; for( int i = 0; i<=4; ++i) { switch(i) { case 0: cout << "case 0" << endl; break; case 1: cout << "case 1" << endl; break; case 2: cout << "case 2" << endl; break; case 3: cout << "case 3" << endl; break; case 4: cout << "case 4" << endl; break; } } return 0; }
-
Ramsis schrieb:
Hab gerade ausprobiert, du hattest recht.

Diese beiden for schleifen machen genau das gleiche.Wie sollten sie auch etwas anderes machen? Ich hatte die Erklärung für for-Schleifen schon einmal kurz gemacht:
for(<1>;<2>;<3>)...
1. Einmalig am Anfang
2. Prüfung einmal pro Schleifenbegin
3. Einmal pro Schleifendurchlauf am EndeUnd wenn du in eine Zeile "++i;" statt "i++;" schreibst macht dies nunmal keinen Unterschied (außer das beim i++ unter Umständen eine temporäre Kopie erzeugt wird, was bei ++i nicht der Fall sein sollte - es sei den irgendwer hält sich nicht an die Üblichen Implementierungsregeln).
cu André
-
Mein logikfehler
war, dass diese ++ beiden Operatoren (post, pre )
seiteneffekte auch in der for schleife produzieren, was nicht der fall ist.ausgabe der beiden for schleifen mit dem logikfehler:
case 0
case 1
case 2
case 3
case 4case 1
case 2
case 3
case 4