fue*_*zig 3 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>
Run Code Online (Sandbox Code Playgroud)
<near match>表示什么以及如何修复此错误?
(我在没有(希望)删除必要信息的情况下尽可能地简化了错误消息.实际上,我不想在这里提出一个明确的例子,但鼓励对这个问题的一般回复!)
Dou*_*der 14
我通常会看到<near match>一个可能的方法匹配除了const.在这种情况下,字符串可能是可选参数吗?在这种情况下,问题是你有一个const对象,并试图调用非const方法.
注意:我没有看过编译器代码,只看了gcc生成的错误消息.
编辑:
从你的评论中,最后的字符串是可选的,所以不是问题.假设这是你想要调用的方法,那么问题是你有一个const指针/对象的引用,并试图调用非const方法.为了解决这个问题,要么:
const如果方法没有修改对象的可见状态,请创建该方法如果这些选项都不可能,并且作为最后的手段,你不能改变这些东西中的任何一个你可以const_cast指针/引用,但是你会在代码中留下一个非常难闻的气味.
我们const_cast的代码中有一些地方可以做,但是只有在调用旧的C函数时才会使用非常量指针但不修改它.在您控制的直接C++代码中,您可以避免const_cast.
它是重载解决过程的一部分。
编译器列出了在此重载决议中考虑的所有重载,以便您可以检查您实际想要调用的重载是否确实存在(如果没有,则您错过了标头包含、限定等...)
<near match> 表示这是(根据编译器)您实际想要调用的可能重载,因为它是根据标准(常量、可能的转换等)的最佳重载
换句话说,这表明在考虑的所有重载中,您可能想要调用它并且应该检查您的参数是否与签名实际匹配。