簡體   English   中英

錯誤:重載運算符“ *”的使用不明確

[英]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類中定義了operator*並使其返回Vec2f ,則代碼可以Vec2f進行Vec2f 但是,從語義的角度來看這沒有什么意義(取消引用的值不應提供相同類型的東西),因此這不是解決問題的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM