Domanda

Questa parte del mio codice OpenGL, sto ottenendo un errore per:

struct Ball {
    float x;
    float y;
    float rot;
    float dir;
    bool rmv;
    Ball* next;
};

Ball* curBall;
void addBall() {
    if (balls==NULL) {
        balls=new Ball;
        balls->next=NULL;
        curBall=balls;
    } else {
        curBall->next=new Ball;
        curBall=curBall->next;
        curBall->next=NULL;
    }
    curBall->x=((float)rand()/(float)(RAND_MAX+1))*(ww-1) +1;
    curBall->y=((float)rand()/(float)(RAND_MAX+1))*(wh-1) +1;
    curBall->dir=((float)rand()/(float)(RAND_MAX+1))*(2*PI-1) +1;
    curBall->rot=((float)rand()/(float)(RAND_MAX+1))*(359) +1;
    curBall->rmv=false;
}

error :
In function ‘void addBall()’:
file.cpp:120: warning: integer overflow in expression
file.cpp:121: warning: integer overflow in expression
file.cpp:122: warning: integer overflow in expression
file.cpp:123: warning: integer overflow in expression
È stato utile?

Soluzione

Prova conversione RAND_MAX ad un galleggiante prima aggiungendo ad esso.

curBall->x=((float)rand()/( ((float)RAND_MAX) +1))*(ww-1) +1;

eccetera. RAND_MAX è spesso uguale INT_MAX, il valore più grande di un intero potrebbe contenere, aggiungendo così 1 ad essa mentre è ancora considerato un numero intero spinge oltre il limite intero.

Altri suggerimenti

E 'probabilmente RAND_MAX + 1 che è traboccante, dal momento che potrebbe essere RAND_MAX == INT_MAX.

Direi tua RAND_MAX è uguale al vostro INT_MAX, in modo che tutti i pezzi RAND_MAX+1 sono stracolmi. Dal momento che questi sono due costanti, il compilatore può rilevare che al momento della compilazione.

Potrebbe dipendere dal vostro compilatore se RAND_MAX == MAX_INT poi RAND_MAX + 1 traboccherà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top