【问题标题】:Error: More than one instance of overloaded function matches the argument list错误:多个重载函数实例与参数列表匹配
【发布时间】:2015-05-28 23:27:34
【问题描述】:

我正在使用 OpenMesh 库,它们提供了两个函数 edge(),它们的区别仅在于它们的 constness。 Const edge()edge()。有没有办法向编译器指定我想使用哪个函数?

似乎这应该是与库不同的设计决定,但不确定我是否可以改变它,所以如果有什么我可以在编译器中绕过它...我正在使用 VS2013。

我知道人们已经就这个错误提出了问题,但我没有发现任何对这种情况有帮助的东西。

【问题讨论】:

  • 编译器选择的函数有问题吗?

标签: c++ visual-studio overloading


【解决方案1】:

我假设你的情况是这样的:你有一个

class aclass
{
  edge_t edge(void) ;
  edge_t edge(void) const ;
} ;

如果您有一个 const 对象,则将调用第二个版本,否则将调用非 const。所以如果你有

const aclass x ;
aclass y ;

x.edge() ; // calls the second
y.edge() ; calls the first
const_cast<const aclass &>(y).edge() ; // calls the const (second) 

后者是一种(相对)安全的作弊方式……

【讨论】:

  • 实际上,函数有一个参数Edgehandle,这是导致问题的原因。您可以在我提供的链接中看到函数的签名。 const 转换参数会导致相同的错误。此外,它们是函数,而不是方法,因此不会在对象上调用它。
  • 那么,他们怎么有一个 const 说明符呢?我想你应该再看一遍答案,调用 const 版本应该是 const 的 *this,而不是参数。
  • 确实如此。这没有任何意义...... @BarisDemiray
猜你喜欢
  • 2012-10-12
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多