[英]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.