Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只有一个候选函数的C++编译错误_C++_Compilation - Fatal编程技术网

只有一个候选函数的C++编译错误

只有一个候选函数的C++编译错误,c++,compilation,C++,Compilation,在编译代码时,我遇到以下错误。如果只有一个候选人,为什么要抛出错误?。为什么它不能使用它 错误:没有用于调用“”的匹配函数 TemplateParameters::reset_template_params( const char [8], const char [11], std::vector<const Channel*>, bool, std::map<int, String, std::less<int>, std::alloc

在编译代码时,我遇到以下错误。如果只有一个候选人,为什么要抛出错误?。为什么它不能使用它

错误:没有用于调用“”的匹配函数

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> > >&
)
您的函数调用:

TemplateParameters::reset_template_params传递5个参数,编译器找不到具有相同参数的函数。因此出现了错误

编译器可以找到函数TemplateParameters::reset_template_params,但您传递的参数与编译器看到的函数TemplateParameters::reset_template_params的函数声明不匹配


您需要有一个重载版本的TemplateParameters::reset_template_params,其参数与调用函数时使用的参数完全相同。

您传递的是字符串文本,而函数需要字符串。您的String类是否有一个可以用char const*调用的非显式构造函数?如果没有,那就是你的问题。

检查你的参数,你能把你给出的每一件东西直接转换成参数,例如:
除非明确指定并转换,否则字符串不能同时为常量字符[8]或常量字符[11]

调用和候选字符串之间有两个区别:

前两个字符串参数。如果不存在从C字符串文本到此类的隐式转换,则无法进行调用

向量与向量和参数。我将在一个肢体上,假设您正在向函数传递一个临时向量到一个新创建的向量。编译器不允许这样做,因为您无法将临时引用绑定到非常量引用。在这里使用const引用是可行的。但这当然意味着不能在方法内部修改参数

由于您没有显示如何调用代码,因此这当然是徒劳的推测


字符串参数和参数是可疑的。std::vector&也可能是可疑的。可能没有将常量字符[8]或常量字符[11]转换为字符串的转换序列。您可能想在调用reset_template_params的位置发布一段代码片段,这样我们就可以看到您实际传递的内容,并提及实际传递的字符串。据我所知,它肯定不是std::String。我已经对错误消息进行了格式化,以便它至少基本上是可读的。下次你可以自己做。@silico:为什么要在评论中发布答案?@Dani:这都是猜测。在我看来,这个问题中没有足够的信息让我给出一个明确的答案。我通过了五个参数,而不是六个参数。为什么否决?我从未要求不要向下投票,但如果你做向下投票,请留下原因。我不负责向下投票,但可以看出,如果这不是一个模板,参数不必精确匹配。可以转换为参数类型就足够了。@siri:对!在有人编辑Q以使其可读之前,我发布了答案,因此出现了打字错误。我会改变这一点,剩下的答案仍然有效。@Bo Persson:这是正确的,但通常类会使用显式构造函数来禁用隐式转换。你的秒数解决了我的问题,现在我可以编译了。是的,我是临时通过的,现在我接受它作为常量参考。是否有任何问题我需要考虑临时绑定到永久引用。