c++ - C++ 错误消息 "<near match>"是什么意思?

标签 c++ templates compilation

当使用 GNU C++ 编译器编译我的代码时,我得到类似的东西

bla.cxx: In function `int main(int, const char**)':
bla.cxx:110: error: no matching function for call to `func(const classA*&, const classB<classC>*&) const'
someheader.h:321: note: candidates are: bool func(const classA*, const T*&, const std::string&, std::string&) [with T = classB<classC>] <near match>

什么是 <near match> 指明以及如何修复此错误?

(我在不(希望)删除必要信息的情况下尽可能简化了错误消息。实际上,我宁愿不在此处放置一个明确的示例,但鼓励对问题进行一般性答复!)

最佳答案

我通常会看到 <near match>当可能的方法匹配时,除了 const .也许在这种情况下字符串是可选参数?在这种情况下,问题是您有一个 const 对象,并试图调用一个非常量方法。

注意:我从未看过编译器代码,只是看过 gcc 生成的错误消息。

编辑:

根据您的评论,最后的字符串是可选的,所以不是问题。假设这是您要调用的方法,那么问题是您有一个指向该对象的 const 指针/引用,并且正在尝试调用一个非常量方法。要解决此问题,可以:

  • 制作方法const , 如果它不修改对象的可见状态
  • 或者传递一个非常量引用/指针

如果这两个选项都不可能,并且作为最后的手段,您不能更改其中任何一个,您可以 const_cast指针/引用,但是你会在代码中留下难闻的气味。

我们确实有几个地方可以做到 const_cast s 在我们的代码中,但仅当调用旧 C 函数时,它采用非常量指针但不修改它。在您控制的直接 C++ 代码中,您可以避免 const_cast .

关于c++ - C++ 错误消息 "<near match>"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1530752/

相关文章:

c++ - 递归合并排序算法实现

java - Java复制文件的方法

Java 内存中即时类编译(和加载)

c++ - 如何在类声明中初始化一个 CEvent 成员?

c++ - C++中没有关键字的语句 block

python - "Cannot convert Python object argument to type ' <typename> '"- 使用 Cython 包装 C++ 类时出错

c++ - 在带有模板参数的模板中使用重载函数

c++ - 链接器看不到基类(纯虚拟)中定义的模板函数

c++ - 如何在另一边创建重载 +

使用 JavaCompiler API 进行 Java 代码编译和编译错误处理