[英]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.