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

时间:2011-06-13 12:12:11

标签: 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::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> > >&
)

4 个答案:

答案 0 :(得分:3)

电话和候选人之间有两个不同之处:

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

  • vectorvector&参数。我正在走出困境,并假设你正在将一个临时的传递给一个新创建的向量。编译器不允许这样做,因为您不能将临时绑定到非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]