错误:重载运算符的使用不明确'*'
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
,则代码可以按原样编译。然而,从语义的角度来看,这没有什么意义(去引用的值不应该给出相同类型的值(,所以这不是解决问题的方法。
相关文章:
- 重载类方法的不明确调用
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 运算符[]和运算符int()的不明确重载
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 类运算符的不明确重载>>
- 使用 C++11 选项编译 C++98 代码时由于 Boost 标头而导致的不明确重载
- "authlog = myfile"中"运算符 ="的不明确重载
- Rcpp:"运算符="矩阵和列表的不明确重载
- 从具有运算符重载的模板化类继承。'operator*'的不明确重载
- 带有已删除的移动构造函数的不明确重载
- "std::cin >> 中"运算符>>"的不明确重载
- C++“运算符”的不明确重载
- 函数的不明确重载,如“msg(long)”与候选“msg(int32_t)”和“msg(int64_t)”
- "std::cin >>"中"运算符>>"的不明确重载
- 操作员在不同命名空间中的不明确重载
- 使用 +(一元加号)解决 lambda 的函数指针和 std::function 上的不明确重载
- C++ 复杂类的运算符>>中的不明确重载
- 运算符的不明确重载>>"在"获取文件>>点"
- 使用模板模板参数'operator<<'的不明确重载
- 解决运算符 [] 的不明确重载