error: use of overloaded operator '*' is ambiguous
error: use of overloaded operator '*' is ambiguous
当我尝试用 C++ 编译此源代码时:
void ParticleSystem::setState(std::vector<Vec2f>& statesVector)
{
std::vector<Vec2f> pState(2);
for (int i = 0; i < 2*np; i += 2) {
pState[0] = *statesVector[i];
pState[1] = *(statesVector[i+1]);
(*particles[i/2]).setState(pState);
}
}
我收到以下错误:
ParticleSystem.cpp:110:15: error: use of overloaded operator '*' is ambiguous (operand type
'value_type' (aka 'gfx::TVec2<float>'))
pState[0] = *statesVector[i];
^~~~~~~~~~~~~~~~
ParticleSystem.cpp:110:15: note: built-in candidate operator*(float *)
ParticleSystem.cpp:110:15: note: built-in candidate operator*(const float *)
ParticleSystem.cpp:111:15: error: use of overloaded operator '*' is ambiguous (operand type
'value_type' (aka 'gfx::TVec2<float>'))
pState[1] = *(statesVector[i+1]);
我已经在论坛中查找错误并执行了一些步骤,但我始终无法解决问题。此外,我也试图理解错误注释中的解释,但我不能。
我真的希望有人能帮助我。
最后,如果有人对这个问题给出负面评价,请至少解释一下原因。
问题是你没有理解引用附带的语法。当您使用 &
声明引用时,您可以像使用实际变量一样使用它而不是指针,这意味着您不能在其上使用运算符 *
(除非它是引用在指针类型上)。使用 *
运算符产生的效果与在常规变量上使用它的效果相同。
您可以像这样删除代码中的 *
来解决您的问题:
pState[0] = statesVector[i];
pState[1] = statesVector[i+1];
particles[i/2].setState(pState);
如果您在 Vec2f
class 中定义 operator*
并将其设为 return 为 Vec2f
,则您的代码可以按原样编译。但是,从语义的角度来看这没有什么意义(取消引用的值不应该给出相同类型的东西)所以这不是解决问题的方法。
当我尝试用 C++ 编译此源代码时:
void ParticleSystem::setState(std::vector<Vec2f>& statesVector)
{
std::vector<Vec2f> pState(2);
for (int i = 0; i < 2*np; i += 2) {
pState[0] = *statesVector[i];
pState[1] = *(statesVector[i+1]);
(*particles[i/2]).setState(pState);
}
}
我收到以下错误:
ParticleSystem.cpp:110:15: error: use of overloaded operator '*' is ambiguous (operand type
'value_type' (aka 'gfx::TVec2<float>'))
pState[0] = *statesVector[i];
^~~~~~~~~~~~~~~~
ParticleSystem.cpp:110:15: note: built-in candidate operator*(float *)
ParticleSystem.cpp:110:15: note: built-in candidate operator*(const float *)
ParticleSystem.cpp:111:15: error: use of overloaded operator '*' is ambiguous (operand type
'value_type' (aka 'gfx::TVec2<float>'))
pState[1] = *(statesVector[i+1]);
我已经在论坛中查找错误并执行了一些步骤,但我始终无法解决问题。此外,我也试图理解错误注释中的解释,但我不能。 我真的希望有人能帮助我。
最后,如果有人对这个问题给出负面评价,请至少解释一下原因。
问题是你没有理解引用附带的语法。当您使用 &
声明引用时,您可以像使用实际变量一样使用它而不是指针,这意味着您不能在其上使用运算符 *
(除非它是引用在指针类型上)。使用 *
运算符产生的效果与在常规变量上使用它的效果相同。
您可以像这样删除代码中的 *
来解决您的问题:
pState[0] = statesVector[i];
pState[1] = statesVector[i+1];
particles[i/2].setState(pState);
如果您在 Vec2f
class 中定义 operator*
并将其设为 return 为 Vec2f
,则您的代码可以按原样编译。但是,从语义的角度来看这没有什么意义(取消引用的值不应该给出相同类型的东西)所以这不是解决问题的方法。