繁体   English   中英

没有用于“值类型”的初始化的匹配构造函数

[英]No matching constructor for initialisation of 'value type'

我有一些代码可以获取最常用的单词并将其放入向量中。 然后,我将向量按数字顺序排序,所有这些工作正常。 然后,我尝试将向量的大小调整为10,以便获得我想按单词排序的前十名。

我认为问题出在我的部分结构上,但是我不确定这是我正在使用的代码。

struct wordFreq
{
    string word;
    int count;

    wordFreq(string str, int c): word(str),count(c) { }
}; 

words.resize(10);

任何帮助将不胜感激。

调整向量大小时,函数resize需要知道新元素的值。 因此,通话

words.resize(10);

包括形式为wordFreq()的默认参数,在您的情况下此参数无效,因为wordFreq类没有默认的构造函数。

如果未创建任何新元素,请使用“ erase而不是“ resize

words.erase(words.begin() + 10, words.end());

由于您使用的是vector::resize vector尝试使用wordFreq类的默认ctor创建10对象。 由于没有可用的默认ctor,因此会出现编译器错误。 对于您提到的情况,不需要使用resize方法,只需对1..10循环即可使用前10个元素,因为已经对向量进行了排序。

您需要创建一个默认构造函数,因为vector使用它来为新元素腾出空间。

wordFreq() : word(""), count(0) { }

vector::resize函数要求项目具有不带参数的构造函数(默认构造函数)。 请参阅MSDN页面中的 “容器元素的要求”部分。 句子“对容器的某些操作可能还需要公共默认构造函数”与vector::resize

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM