Maxius Temat założony przez niniejszego użytkownika |
[ALLEGRO5] Błąd przy kompilacji » 2012-06-05 17:20:56 Witam! Pisząc grę napisałem funkcję typu bool, jednak pojawia się błąd o treści: warning: control reaches end of non-void function |
Oto kod: bool CollideEkran_Wrog( Wrog w1[], Wrog w2[], int size1, int size2, Serduszko & Serduszeczko ) { for( int i = 0; i < size1; i++ ) { if( w1[ i ].y >= height ) { return true; } else return false; } for( int i = 0; i < size2; i++ ) { if( w2[ i ].y >= height ) { return true; } else return false; } if( CollideEkran_Wrog( w1, w2, ILE_WROG_1, ILE_WROG_2, Serduszeczko ) == true ) Serduszeczko.ilosc--; }
Pomożecie? |
|
m4tx |
» 2012-06-05 17:31:56 Nie dajesz kompilatorowi gwarancji, że Twoja funkcja zwróci jakąś wartość. Masz 2 pętle for i w nich masz returny: for( int i = 0; i < size1; i++ ) { if( w1[ i ].y >= height ) { return true; } else return false; } for( int i = 0; i < size2; i++ ) { if( w2[ i ].y >= height ) { return true; } else return false; } Zauważ, że jeżeli size1 i/lub size2 > 0, to powyższy zapis jest jednoznaczny z: if( w1[ 0 ].y >= height ) { return true; } else return false;
if( w2[ 0 ].y >= height ) { return true; } else return false; Czyli tak naprawdę pętla for jest tu absolutnie zbędna. A jeżeli size1 i size2 == 0, to funkcja nie zwróci żadnej wartości, bo pętla for się nie wykona. Musisz zagwarantować więc kompilatorowi, że Twoja funkcja zwróci jakąś wartość. if( CollideEkran_Wrog( w1, w2, ILE_WROG_1, ILE_WROG_2, Serduszeczko ) == true )
Nie musisz dawać == true , powyższa linia jest równoznaczna z: if( CollideEkran_Wrog( w1, w2, ILE_WROG_1, ILE_WROG_2, Serduszeczko ) )
|
|
Maxius Temat założony przez niniejszego użytkownika |
» 2012-06-05 17:37:53 Usunąłem pętle for... i efekt jest taki, że nie ma warning'a, ale nie działa do końca tak jak powinno, ale to (chyba) nie jest związane z tą funkcją. dzięki. |
|
m4tx |
» 2012-06-05 17:48:33 nie działa do końca tak jak powinno |
No wiesz, jak masz coś takiego: if( w1[ 0 ].y >= height ) { return true; } else return false; To chyba logiczne, że wszystko, co jest po tych instrukcjach, się nie wykona :) Z tego może wynikać właśnie to, że funkcja "nie działa do końca tak jak powinna". |
|
Maxius Temat założony przez niniejszego użytkownika |
» 2012-06-05 17:50:37 Wykonuje się poprawnie tzn. odejmuje ilość serduszek, ale tu chodzi o to, że gdy ta ilość się zmniejsza, to równocześnie bitmapa serca znika(jest ich 5). |
|
« 1 » |