Zunächst möchte ich mich im Voraus entschuldigen, wenn die Antwort offensichtlich ist; Ich bin sehr neu in C++ und meine Muttersprache ist Java. Ich bin auch neu in Stack Overflow, also wenn etwas mit meiner Frage nicht stimmt oder du etwas anderes brauchst, sag es mir bitte.Seltsamer Fehler mit Standardkonstruktor (C++)
So. Ich habe dieses Stück Code hier: (I SFML für den Vektor verwenden und die 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);
}
Und hier ist die Kopfzeile (in die obige Datei #include):
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();
};
Als ich Erstellen Sie den Ball mit
(und ja, alle SFML-Rendering-Sachen funktioniert), wird es nie angezeigt. Ein wenig Untersuchung zeigt, dass die Variablen loc.x und loc.y nicht gesetzt sind und wahrscheinlich auch nicht der Radius, die Füllfarbe usw. des Ballobjekts. Wenn ich die Werte dieser mit std :: cout innerhalb der Konstruktor, loc.x und loc.y und alle anderen sind gesetzt, so nehme ich an, dass sie irgendwo nach dem Konstruktor nicht gesetzt werden. Was seltsam ist, dass, wenn ich den Ball mit
Ball ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
oder sogar
Ball ball(400, 300);
alles schaffen funktioniert perfekt, und der Ball erscheint auf dem Bildschirm. Ich bin wirklich Jungs ratlos. Wenn mir jemand helfen könnte, wäre das großartig.
BTW, ich benutze OS X 10.8 mit Xcode 4.5.2 und mit SFML RC2.0, wenn das einen Unterschied macht.
Danke,
Matt
Vielen Dank für die schnelle Antwort! Ich werde eine init() - Funktion erstellen, die von beiden Konstruktoren aufgerufen wird, da dies der beste Weg scheint, um das zu tun, was ich tun möchte. Der Wechsel von Java zu C++ ist sehr verwirrend. – SlEePlEs5