С ++ вылетает с использованием фреймворков, плохой конструктор
Я пишу простую анимацию, чтобы нарисовать мяч, отражающийся от стен. Вот класс:
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
внутри класса. Всегда хорошо инициализировать все переменные в конструкторах, а не в классе.