Frage

Dies ist der Teil meines OpenGL-Code, erhalte ich einen Fehler für:

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
War es hilfreich?

Lösung

Versuchen RAND_MAX mit einem Schwimmer Umwandlung vor ihm hinzufügen.

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

et cetera. RAND_MAX ist oft gleich zu INT_MAX, der größte Wert eine ganze Zahl halten konnte, also 1 zu ihm hinzufügen, während es noch einer ganzen Zahl drückt es über die ganze Zahl Grenze betrachtet wird.

Andere Tipps

Es ist wahrscheinlich RAND_MAX + 1 das ist überfüllt, da RAND_MAX gut == INT_MAX sein kann.

Ich schätze Ihre RAND_MAX auf Ihre INT_MAX gleich ist, so dass alle Ihre RAND_MAX+1 Stücke sind überfüllt. Da diese beiden Konstanten sind, kann der Compiler bei der Kompilierung erkennen.

Es könnte auf Ihrem Compiler abhängen, ob RAND_MAX == MAX_INT dann RAND_MAX + 1 überlaufen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top