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,则您的代码可以按原样编译。但是,从语义的角度来看这没有什么意义(取消引用的值不应该给出相同类型的东西)所以这不是解决问题的方法。