当只需要 2 个参数时,没有匹配的函数来调用 6 个参数

Posted

技术标签:

【中文标题】当只需要 2 个参数时,没有匹配的函数来调用 6 个参数【英文标题】:No matching function for call with 6 arguments when it only needs 2 【发布时间】:2017-04-18 03:42:10 【问题描述】:

我在测试我的类时遇到问题,因为其中一个测试用例给了我一个包含 6 个值的数组,而我的函数似乎没有捕捉到它。我怎样才能修改它们以便它们工作? 测试用例:

case 2:
  BiStack<long> b1,2,3,4,5,6;
  cout << b.capacity() << endl;
  cout << b.size() << endl;
  cout << b.max() << endl;
  break;

这些是我的头文件中的函数:

BiStack() = default;
BiStack(size_t init, size_t max);
BiStack(initializer_list<ElementT>, size_t max);

它给了我这个错误:

error: no matching function for call to 'BiStack<long int>::BiStack(<brace-enclosed initializer list>)'
     BiStack<long> b1,2,3,4,5,6;

我不知道这是否足够的信息,但我感谢您的帮助!

【问题讨论】:

具有初始化列表的构造函数需要 2 个参数。您没有指定 'max' 参数的值。试试 BiStack b1,2,3,4,5,6, 6; 如果无法修改测试用例,那我可以在另一端更改什么? 如果你想做 BiStack b1,2,3,4,5,6,你需要有一个带单个参数的 BitStack 构造函数:BiStack(initializer_list); 【参考方案1】:

你正在尝试使用这个构造函数:

BiStack(initializer_list<ElementT>, size_t max);

所以,使用这个初始化:

BiStack<long> b1,2,3,4,5, 6;

如果无法修改测试用例,可以多加一个构造函数BiStack

BiStack(initializer_list<ElementT>); // last element is 'max'

【讨论】:

【参考方案2】:

BiStack(initializer_list&lt;ElementT&gt;, size_t max);

这与BiStack&lt;long&gt; b1,2,3,4,5,6; 不匹配,因为无法匹配第二个参数max。所有六个元素都被视为初始化列表的一部分。您可以像这样从列表本身获取大小,即构造函数中没有第二个参数:

BiStack(initializer_list<ElementT> lst) 
    size_t max = lst.size();

或者如果max 可以与列表大小不同,那么您可以将第二个参数与额外的 分开,如下所示:

BiStack<long> b1,2,3,4,5,6, 100;

【讨论】:

【参考方案3】:

以下初始化列表:

BiStack<long> b1,2,3,4,5,6;

表示你的构造函数有 6 个参数,但你定义了它

BiStack(initializer_list<ElementT>, size_t max);

所以您缺少 size_t 参数

【讨论】:

以上是关于当只需要 2 个参数时,没有匹配的函数来调用 6 个参数的主要内容,如果未能解决你的问题,请参考以下文章

C语言中怎样调用函数(举个例子)

方法没有重载 ... 需要 10 个参数。但是参数/参数匹配

C++'没有匹配的调用函数'和'没有已知的参数转换'

rcpp中没有匹配的调用函数

C ++没有匹配函数来调用向量中的擦除

函数与代码复用