【问题标题】:Call to a function is ambiguious对函数的调用不明确
【发布时间】:2011-10-05 23:54:48
【问题描述】:

我正在尝试构建程序但出现错误:

application_ob.cpp: In member function 'void ApplicationWindow::OBNewLoad(QString, QString)':
application_ob.cpp:103:41: error: call of overloaded 'FormatFromExt(QString&)' is ambiguous
application_ob.cpp:103:41: note: candidates are:
/usr/include/openbabel-2.0/openbabel/obconversion.h:81:24: note: static OpenBabel::OBFormat* OpenBabel::OBConversion::FormatFromExt(const char*)
/usr/include/openbabel-2.0/openbabel/obconversion.h:84:24: note: static OpenBabel::OBFormat* OpenBabel::OBConversion::FormatFromExt(std::string)

如何修补它才能正常构建?由于我不懂C++,请简单解释一下。

【问题讨论】:

  • 如果你不懂 C++,你应该联系 [可以说] 懂 C++ 的开发人员,让他们修复他们的产品。

标签: c++ function-calls


【解决方案1】:

application_ob.cpp 的第 103 行可能是这样的:

FormatFromExt(qs);

直接的解决方案是将其(或其等效项)更改为

FormatFromExt(qs.toStdString());

但是,对于qs 的可能内容,我们没有足够的信息来判断上述方法在处理非拉丁字符时是否有效。更好的选择是 在this answer 中介绍,但要在它们之间进行选择,我们必须知道我们正在处理什么样的数据。

【讨论】:

  • 奇怪的是,我看不到任何从QStringstd::string 的隐式转换 char const*,那么为什么either 会重载成为候选人?
  • @Tomalak Geret'kal:完全不知道...也许编译器只是在说“看,我可以在这里调用两个具有该名称的方法,但没有一个带有参数的方法 you're给我”。
  • 不,它明确表示有两个候选人。找不到匹配的函数是另一回事。
  • @tomalak 请参阅该页面上宏“QT_NO_CAST_TO_ASCII”的文档。
  • @Johannes:啊,谢谢。奇怪的是隐式转换本身没有记录;只是如何禁用它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多