奇怪的行为合并两个类函数并通过引用传递变量
Weird behavior merging 2 class functions and passing variables by reference
我有以下两个类函数,我试图合并为一个,因为它们非常相似:
void Camera::UpdateCameraPosition(void) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
Position.SetValue(
Player.x + CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
Player.y + CAMERA_ORBIT_OFFSET * sin(-beta),
Player.z + CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
Position = Player;
}
}
void Camera::UpdatePlayerPosition(void) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
Player.SetValue(
Position.x - CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
Position.y - CAMERA_ORBIT_OFFSET * sin(-beta),
Position.z - CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
Player = Position;
}
}
可以看到,Player
和Position
是类的两个私有变量。它们的数据类型是Vector3D
,另一个类。
我试着像这样合并它们:
void Camera::UpdateCameraOrPlayerPosition(Vector3D &target, Vector3D reference) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
target.SetValue(
reference.x - CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
reference.y - CAMERA_ORBIT_OFFSET * sin(-beta),
reference.z - CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
target = reference;
}
}
这可以编译,但它的行为不一样。当其他两个函数工作时,当我将这些函数调用替换为这个函数时,它不能正常工作。
我所做的替换是:
UpdatePlayerPosition() -> UpdateCameraOrPlayerPosition(Player, Position)
UpdateCameraPosition() -> UpdateCameraOrPlayerPosition(Position, Player)
我也尝试用指针代替引用,结果是一样的。我遗漏了什么吗?
您会注意到这个目标。当调整X、Y、Z坐标时,SetValue为Camera使用+,为Player使用-
相关文章:
- 启动类函数作为失去引用的线程
- 类 Referention 中C++回调函数引用非静态函数
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- C++ 为什么要将对基类的引用传递给派生类的构造函数
- Python在不引用类名的情况下调用类函数
- C++通过 const 引用传递时不调用派生类函数
- 如何正确初始化复制构造函数(以类为引用的构造函数)
- 为什么当类具有引用成员时C++编译器不删除复制构造函数
- 在类中引用函数时的"No Matching Function for Call"
- 对抽象类的引用不能传递给线程函数?
- 将基类的引用传递给 boost::thread 并在派生类中调用虚函数是否有效
- 从对基类的引用中调用更具体的重载函数
- 当我定义一个具有类(非引用)返回类型的函数时,调用类的默认构造函数或复制构造函数
- 通过引用传递的函数接受对具有运算符()的类的引用
- 用非限定名称引用类函数
- 如何在类中引用本机函数
- C++让类函数传递对类本身的引用
- 派生类函数参数作为基类引用导致C2678
- 你能初始化一个类中引用该类中函数的线程吗
- 当我尝试编译时对类::函数的未定义引用