Trước hết, tôi muốn xin lỗi trước nếu câu trả lời là hiển nhiên; Tôi rất mới với C++ và ngôn ngữ đầu tiên của tôi là Java. Tôi cũng mới vào Stack Overflow, vì vậy nếu có điều gì đó sai với câu hỏi của tôi hoặc bạn cần bất cứ điều gì khác, xin vui lòng cho tôi biết.Lỗi lạ với hàm tạo mặc định (C++)
So. Tôi có đoạn mã này ở đây: (Tôi đang sử dụng SFML cho vector và 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);
}
Và đây là tiêu đề (#included vào file trên):
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();
};
Khi tôi tạo bóng với
Ball ball;
(và có, tất cả công cụ hiển thị SFML hoạt động), nó không bao giờ hiển thị. Một chút điều tra cho thấy các biến loc.x và loc.y của nó không được thiết lập, và có lẽ, không phải là bán kính, tô màu, vv của đối tượng bóng. Nếu tôi in các giá trị của chúng với std :: cout bên trong hàm tạo, loc.x và loc.y và tất cả các số khác là, vì vậy tôi giả định rằng chúng bị bỏ đặt ở đâu đó sau hàm tạo. Có gì là lạ là nếu tôi có thể tạo bóng bằng
Ball ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS, (rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
hoặc thậm chí
Ball ball(400, 300);
tất cả mọi thứ hoạt động hoàn hảo, và bóng xuất hiện trên màn hình. Tôi thực sự là những kẻ bối rối. Nếu có ai có thể giúp tôi, điều đó thật tuyệt.
BTW, tôi đang chạy OS X 10.8 với Xcode 4.5.2 và sử dụng SFML RC2.0, nếu điều đó tạo ra bất kỳ sự khác biệt nào.
Cảm ơn,
Matt
Cảm ơn mọi người đã trả lời nhanh quá! Tôi sẽ tạo ra một hàm init() được gọi bởi cả hai hàm tạo, vì nó dường như là cách tốt nhất để làm những gì tôi muốn làm. Di chuyển từ Java sang C++ là hella khó hiểu. – SlEePlEs5