С ++ вылетает с использованием фреймворков, плохой конструктор

Я пишу простую анимацию, чтобы нарисовать мяч, отражающийся от стен. Вот класс:

class Ball{

private:
int x,y; //position
int vx,vy;  //velocity
int rad=20;  //radius
ofColor color; //color

public:   
Ball(int a, int b, int c, int d,ofColor e);
Ball();
void draw(); 
void move();
};

Когда я создаю Ball с 5 аргументами, все работает нормально, но происходит сбой, когда я использую тот без аргументов:

Ball::Ball(){

x=int(ofRandomWidth());
y=int(ofRandomHeight());
vx=int(ofRandom(-10,10));
vy=int(ofRandom(-10,10));

int r=int(ofRandom(0,255));
int g=int(ofRandom(0,255));
int b=int(ofRandom(0,255));
ofColor a(r,g,b);
color=a;
}

Что может быть не так с этим конструктором?

ofRandom:

float ofRandom(float max) {
return max * rand() / (RAND_MAX + 1.0f);
}

//--------------------------------------------------
float ofRandom(float x, float y) {

float high = 0;
float low = 0;
float randNum = 0;
// if there is no range, return the value
if (x == y) return x;           // float == ?, wise? epsilon?
high = MAX(x,y);
low = MIN(x,y);
randNum = low + ((high-low) * rand()/(RAND_MAX + 1.0));
return randNum;
} 

1 ответ

Вы должны написать тело нулевого конструктора, т.е. Ball(), В этом вы должны инициализировать все ваши переменные к некоторому значению, которое вы решите. В противном случае эти целые будут иметь либо значение мусора, либо значение по умолчанию 0.

Также color является объектом класса ofColor право? Итак, в нулевом конструкторе вы должны инициализировать значение color также вызывая его конструктор в списке инициализатора конструктора, например:

Ball(): color() или параметризованный конструктор в зависимости от того, что вы написали.

это то, что может быть неправильным в вашем конструкторе, но так как вы не опубликовали код, я не могу сказать.

Другое дело, что вы инициализировали переменную rad внутри класса. Всегда хорошо инициализировать все переменные в конструкторах, а не в классе.

Другие вопросы по тегам