当只需要 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你正在尝试使用这个构造函数:
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<ElementT>, size_t max);
这与BiStack<long> 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 个参数的主要内容,如果未能解决你的问题,请参考以下文章