伙计们,我对c ++很新。我刚刚写了这堂课:
class planet
{
public:
float angularSpeed;
float angle;
};
这是一个试图修改对象角度的函数:
void foo(planet* p)
{
p->angle = p->angle + p->angularSpeed;
}
planet* bar = new planet();
bar->angularSpeed = 1;
bar->angle = 2;
foo(bar);
看起来酒吧的角度根本没有变化。
答案 0 :(得分:4)
请注意,您通过指针传递bar
,而不是通过引用传递。传递参考将如下所示:
void foo(planet& p) // note: & instead of *
{
p.angle += p.angularSpeed; // note: . instead of ->
}
Pass-by-reference具有额外的好处,p
不能是空引用。因此,您的函数不能再导致任何null解除引用错误。
其次,这是一个细节,如果您的planet
仅包含公共成员变量,您也可以声明struct
(默认可访问性为public
)。
PS:据我所见,你的代码应该工作;至少你向我们展示的部分。
答案 1 :(得分:3)
外观必须具有欺骗性,因为代码应导致foo(bar)
更改angle
字段的内容。
顺便说一句,这不是通过引用传递,而是通过指针传递。你能改变头衔吗?
通过引用传递(更好)将是
void foo(planet& p) {
p.angle += p.angularSpeed;
}
planet bar;
bar.angularSpeed=1;
bar.angle=2;
foo(bar);
您可能还会考虑planet
的构造函数,该构造函数将angle
和angularSpeed
的初始值作为参数,并定义一个默认构造函数,将它们都设置为0.否则您有由于planet
个实例中的未设置值而导致的错误服务器场。