Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C++ ошибка компилятора: error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов

Роман Protocol Мыслитель (8562), закрыт 7 лет назад
Всем привет!
В чём я ошибся и как нужно правильно сделать. Пытаюсь заполнить вектор числами и показать его в консоле.
Строка об ошибке: 1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.11.25503\include\algorithm(1158): error C2064: результатом вычисления фрагмента не является функция, принимающая 0 аргументов
Я думаю ошибка в строке с generate. Я её закомментировал и ошибки не было. Но эта строка нужна. Через for не нужно. Хочу попробовать generate.

include
include
include
include
include
include

using namespace std;

int irand(int a, int b)
{
return a + rand() % (b - a + 1);
}

void main()
{
setlocale(LC_ALL, "rus");
srand(time(0));
const unsigned n = 20;
int a = 0, b = 10;
vector myVector(n);
generate(myVector.begin(), myVector.end(), irand(a, b));
copy
(
myVector.begin(), // итератор начала массива
myVector.end(), // итератор конца массива
ostream_iterator(cout, " ") //итератор потока вывода
);
cin.get(); cin.get();
}

Спасибо за ответы!
Дополнен 7 лет назад
Подключены заголовочные файлы:
iostream
vector
iterator
cstdlib
ctime
algorithm
Лучший ответ
mcferden Мастер (2235) 7 лет назад
generate(myVector.begin(), myVector.end(), [=](){ return irand(a, b); });
Роман ProtocolМыслитель (8562) 7 лет назад
Может так?: generate(myVector.begin(), myVector.end(), [](int a, int b) { return irand(a, b); });
А то в тело не входят переменные.
Лямбд тоже не помог. Та же ошибка.
mcferden Мастер (2235) Исправил, проверь еще раз.
Остальные ответы
Андрей Чушев Гуру (3799) 7 лет назад
поменяй на a = 1, может поможет
Роман ProtocolМыслитель (8562) 7 лет назад
Не помогло. Я туда вообще литерал ставил - не помогло.
Имею ввиду: generate(myVector.begin(), myVector.end(), 7);
Похожие вопросы