我有以下cpp代码:
Pong::Pong()
{
PongPaddle pp1(0, 240/2 - 5, 10, 40, 40, 41);
PongPaddle pp2(320-10, 240/2 - 5, 10, 40, 38, 39);
//p1 = (PongPaddle*) malloc(sizeof(PongPaddle));
//p2 = (PongPaddle*) malloc(sizeof(PongPaddle));
p1 = &pp1;
p2 = &pp2;
Serial.print("X: ");Serial.println((*p1).x);
Serial.print("Y: ");Serial.println((*p1).y);
PongBall ppb(240/2, 320/2, 5, p1, p2);
}
标题为:
class Pong {
public:
Pong();
void update();
void draw(Adafruit_TFTLCD tft);
PongPaddle *p1;
PongPaddle *p2;
PongBall *pb;
};
PongPaddle有一个更新类,当它被称为它的x&y值不是我设置的值时,而是随机数。我的猜测是我弄乱了指针。 (我尝试使用malloc,但没有帮助)
最佳答案
本杰明·林德利的答案指出了代码中的真正问题。如果必须在Pong
中使用指针,请将Pong::Pong
更改为:
Pong::Pong()
{
p1 = new PongPaddle(0, 240/2 - 5, 10, 40, 40, 41);
p2 = new PongPaddle(320-10, 240/2 - 5, 10, 40, 38, 39);
Serial.print("X: ");Serial.println((*p1).x);
Serial.print("Y: ");Serial.println((*p1).y);
PongBall ppb(240/2, 320/2, 5, p1, p2);
}
请记住,在类中使用指针而不是对象是一个陷阱。您必须实现:
使用指针
p1
和p2
做正确的事情。请引用The Rule of Three。
更新,响应OP 的最新评论
Pong::Pong()
必须在构造函数的初始化列表中使用正确的参数来初始化p1
和p2
。否则,将使用默认构造函数。这就是编译器所抱怨的。Pong::Pong() : p1(0, 240/2 - 5, 10, 40, 40, 41),
p2(320-10, 240/2 - 5, 10, 40, 38, 39)
{
Serial.print("X: ");Serial.println(p1.x);
Serial.print("Y: ");Serial.println(p1.y);
PongBall ppb(240/2, 320/2, 5, &p1, &p2);
}