【问题标题】:Ambiguous const Function模棱两可的 const 函数
【发布时间】:2015-12-08 23:19:56
【问题描述】:

我使用的 api 有一个定义了以下两个函数的类:

Module *getParent() { return Parent; }
const Module *getParent() const { return Parent; }

当我尝试像这样调用函数的 const 版本时:

void Foo::bar(Function* F){
    const Module* parent = F->getParent();
}

编译器告诉我函数调用不明确。 由于我无法更改函数声明,我如何在函数调用中指定我想要的函数版本?

编辑:根据要求,确切的错误是:

'getParent' is ambiguous Candidates are: llvm::Module * getParent() const llvm::Module * getParent()

这是文件中唯一的错误。

【问题讨论】:

  • F的类型是什么?
  • 问题出在您没有显示的代码中。
  • 代码仍然不足以重现问题(更不用说它实际上需要 llvm 标头和合适的构建设置)。既然您似乎有其中之一:exact 错误是什么(确保您还包括 first 错误)。
  • 我无法重现 gcc 的问题。这可能特定于特定的编译器。你用的是哪一个?

标签: c++ class ambiguous


【解决方案1】:

F 是指向Function 类型对象的指针。由于对象不是 const,F->getParent() 调用 getParent() 的非 const 版本。如果你真的想调用 const 版本,要么将 F 作为指向 const Function 的指针传递,要么将指针转换为指向 const 对象的指针:const_cast<const Function*>(F)->getParent() 将调用 getParent() 的 const 版本。

【讨论】:

  • @Cheersandhth.-Alf - 当然是 const 演员!看?
  • 这仍然不能解释为什么编译器会通知该调用不明确。从您写的内容来看,它应该简单地选择非常量版本。
  • @NO_NAME - 没错。这两个电话都不是模棱两可的。不过,问题中的代码确实有错误,调用 const 版本可以修复它。
  • @PeteBecker:但是为什么呢?我在问题中显示的代码中没有看到错误。
猜你喜欢
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 2018-08-28
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
相关资源
最近更新 更多