Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[ALLEGRO5] Błąd przy kompilacji

Ostatnio zmodyfikowano 2012-06-05 17:50
Autor Wiadomość
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:
C/C++
//funkcja
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;
       
    }
   
    //main()
    if( CollideEkran_Wrog( w1, w2, ILE_WROG_1, ILE_WROG_2, Serduszeczko ) == true )
         Serduszeczko.ilosc--;
   
}
Pomożecie?
P-57883
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:
C/C++
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:
C/C++
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ść.

C/C++
if( CollideEkran_Wrog( w1, w2, ILE_WROG_1, ILE_WROG_2, Serduszeczko ) == true )
Nie musisz dawać
== true
, powyższa linia jest równoznaczna z:
C/C++
if( CollideEkran_Wrog( w1, w2, ILE_WROG_1, ILE_WROG_2, Serduszeczko ) )
P-57884
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.
P-57890
m4tx
» 2012-06-05 17:48:33
nie działa do końca tak jak powinno
No wiesz, jak masz coś takiego:
C/C++
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".
P-57896
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).
P-57898
« 1 »
  Strona 1 z 1