Прежде всего, я хотел бы извиниться заранее, если ответ очевиден; Я очень новичок в C++, и мой первый язык - это Java. Я также новичок в Stack Overflow, поэтому, если что-то не так с моим вопросом или вам нужно что-то еще, скажите мне.Странная ошибка с конструктором по умолчанию (C++)
So. У меня есть этот кусок кода здесь: (я использую SFML для вектора и CircleShape)
Ball::Ball() {
// This ugly thing calls the full constructor with a random x and y position
// in such a way the the entire ball is inside the screen.
Ball::Ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
}
Ball::Ball(float x, float y) {
loc.x = x;
loc.y = y;
ball.setPosition(loc.x - BALL_RADIUS, loc.y - BALL_RADIUS);
ball.setRadius(BALL_RADIUS);
ball.setFillColor(sf::Color::Red);
ball.setOutlineColor(sf::Color::Black);
ball.setOutlineThickness(1);
}
А вот заголовок (#included в вышеуказанный файл):
class Ball {
private:
sf::CircleShape ball;
sf::Vector2f loc;
sf::Vector2f vel;
sf::Vector2f acc;
void update();
void bounce();
void draw();
public:
Ball();
Ball(float x, float y);
void run();
};
Когда я создать шар с
Ball ball;
(и да, все работы по обработке SFML работают), это никогда не отображается. Немного исследования показывают, что его переменные loc.x и loc.y не установлены, и, вероятно, также не являются радиус, fillcolor и т. Д. Объекта шара. Если я напечатаю их значения с помощью std :: cout внутри, то конструктор loc.x и loc.y и все остальные будут установлены, поэтому я предполагаю, что они не будут удалены после конструктора. Странно то, что если я создаю мяч с
Ball ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
или даже
Ball ball(400, 300);
все работает отлично, и мяч появляется на экране. Я действительно в тупик. Если бы кто-нибудь мог мне помочь, это было бы здорово.
BTW, я использую OS X 10.8 с Xcode 4.5.2 и используя SFML RC2.0, если это имеет значение.
Спасибо,
Matt
Спасибо всем за то, что вы так быстро ответили! Я создам функцию init(), вызываемую обоими конструкторами, поскольку это похоже на лучший способ сделать то, что я хочу сделать. Перемещение с Java на C++ - это смешно. – SlEePlEs5