gpt4 book ai didi

c++ - 默认构造函数 (C++) 的奇怪错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:16 25 4
gpt4 key购买 nike

首先,如果答案很明显,我想提前道歉;我是 C++ 的新手,我的第一语言是 Java。我也是 Stack Overflow 的新手,所以如果我的问题有问题或者您需要其他任何东西,请告诉我。

所以。我这里有这段代码:(我正在使用 SFML 作为 vector 和 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 变量没有设置,而且球对象的半径、填充颜色等可能也没有设置。如果我用 std::cout inside 打印这些构造函数的值,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);

一切正常,球出现在屏幕上。我真的很难过伙计们。如果有人能帮助我,那就太好了。

顺便说一句,我正在运行带有 Xcode 4.5.2 的 OS X 10.8,并使用 SFML RC2.0,如果这有什么不同的话。

谢谢,

马特

最佳答案

在 C++11 之前,从另一个构造函数调用构造函数(称为委托(delegate)构造函数)是不可能的。要在 C++11 中执行此操作,您需要使用成员初始化列表:

Ball::Ball()
: Ball((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS,
(rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS)
{ }

C++11 之前的版本,您可以创建另一个函数来完成共同的工作,并让两个构造函数都调用它。

Ball::Ball() {
init((rand() % (WINDOW_X - (2 * BALL_RADIUS))) + BALL_RADIUS,
(rand() % (WINDOW_Y - (2 * BALL_RADIUS))) + BALL_RADIUS);
}

Ball::Ball(float x, float y) {
init(x, y);
}

void Ball::init(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);
}

关于c++ - 默认构造函数 (C++) 的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com