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

时间:2012-03-12 09:23:23

标签: c++ constructor value-type

我有一些代码可以获得最常用的单词并将它们放入向量中。然后我将矢量按数字顺序排序,这一切都很好。然后我尝试将向量调整为10,这样我就可以得到前十个我想要按字词排序的内容。

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

struct wordFreq
{
    string word;
    int count;

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

words.resize(10);

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

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

words.resize(10);

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

如果没有创建新元素,请使用erase代替resize

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

答案 1 :(得分:1)

由于您正在使用vector::resize向量尝试使用10类的默认ctor 创建wordFreq对象。由于没有可用的默认ctor,因此会出现编译器错误。对于您提及的情况,不需要使用resize方法,您可以简单地遍历1..10以使用前10个元素,因为您已经对矢量进行了排序。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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