编译我的代码时遇到以下错误。如果只有一个候选人,为什么会抛出错误?为什么它不能使用呢?
错误:没有匹配函数来调用'
TemplateParameters::reset_template_params( const char [8], const char [11], std::vector<const Channel*>, bool, std::map<int, String, std::less<int>, std::allocator<std::pair<const int, String> > >& )
注意:候选人是:
void TemplateParameters::reset_template_params( String, String, std::vector<const Channel*>&, bool, std::map<int, String, std::less<int>, std::allocator<std::pair<const int, String> > >& )
答案 0 :(得分:3)
电话和候选人之间有两个不同之处:
前两个String
参数。如果不存在从C字符串文字到此类的隐式转换,则无法进行调用。
vector
与vector&
参数。我正在走出困境,并假设你正在将一个临时的传递给一个新创建的向量。编译器不允许这样做,因为您不能将临时绑定到非const引用。使用const-reference可以在这里工作。但这当然意味着无法在方法内修改参数。
由于你没有展示你如何调用代码,这当然是空闲的推测。
答案 1 :(得分:1)
您正在传递字符串文字,您的函数需要String
s。您的String
类是否有可以使用explicit
调用的(非char const*
)构造函数?如果没有,那就是你的问题。
答案 2 :(得分:0)
您的函数调用:
TemplateParameters::reset_template_params()
传递5个参数,编译器找不到具有相同参数的函数。因此错误。
编译器可以找到一个函数TemplateParameters::reset_template_params()
但是你传递的参数与编译器看到函数TemplateParameters :: reset_template_params()的函数声明不匹配。
您需要拥有TemplateParameters::reset_template_params()
的重载版本,其中包含与调用函数完全相同的参数。
答案 3 :(得分:0)
检查您的参数,Can,您给出的每一件事,都可以直接转换为参数,例如: 除非明确指定和转换,否则String不能同时为const char [8]或const char [11]