Нет соответствующего конструктора для инициализации 'типа значения' - PullRequest
0 голосов
/ 12 марта 2012

У меня есть код, который получает наиболее часто встречающиеся слова и помещает их в вектор. Затем я сортирую вектор в числовом порядке, и все это прекрасно работает. Затем я пытаюсь изменить размер вектора до 10, чтобы получить первую десятку, которую я хочу отсортировать по слову.

Я думаю, что проблема заключается в части моей структуры, но я не уверен, что вот код, который я использую.

struct wordFreq
{
    string word;
    int count;

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

words.resize(10);

Любая помощь будет оценена.

Ответы [ 4 ]

3 голосов
/ 12 марта 2012

При изменении размера вектора функция resize должна знать значение для новых элементов. Поэтому звонок

words.resize(10);

включает аргумент по умолчанию в форме wordFreq(), который в вашем случае недопустим, поскольку класс wordFreq не имеет конструктора по умолчанию.

Если новые элементы не создаются, используйте erase вместо resize.

words.erase(words.begin() + 10, words.end());
1 голос
/ 12 марта 2012

Поскольку вы используете vector::resize vector пытается создать 10 объект, используя ctor по умолчанию класса wordFreq.Поскольку ctor по умолчанию недоступен, вы получаете ошибку компилятора.В случае, если вы упоминаете, что нет необходимости использовать метод resize, вы можете просто перебрать 1..10, чтобы использовать 10 лучших элементов, поскольку вы уже отсортировали вектор.

0 голосов
/ 12 марта 2012

vector::resize функция требует, чтобы элементы имели конструктор без параметров (конструктор по умолчанию).См. Раздел «Требования к элементам контейнера» на странице MSDN .Предложение «для некоторых операций над контейнерами может также потребоваться открытый конструктор по умолчанию» относится к vector::resize.

0 голосов
/ 12 марта 2012

Вам нужно создать конструктор по умолчанию, так как вектор использует его, чтобы освободить место для новых элементов.

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