Здесь есть объявления указателя функции, используемые в качестве параметра функции:
int f(int (*funa)());
int f(int funa());
int f(int());//The parameter name can be omitted, such as the function declaration int g(double p); is equal to int g(double);
Итак, посмотрите на вашу проблему:
vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
Да, да, мы знаем, istream_iterator<int>(cin)
естьistream_iterator<int>
параметр типа. Однако, второй параметр - это проблема, с которой мы сталкиваемся: istream_iterator<int>()
можно понимать как указатель на функцию, которая возвращает istream_iterator<int>
и не имеет параметров.Это приводит в замешательство компилятор, v
может быть объявлением функции или определением глагола.Если второй параметр не является указателем на функцию, v
является определением глагола.
Мы можем решить вашу проблему двумя способами: сначала вы можете объявить итераторы, а затем использовать их в v
:
istream_iterator<int> dataBegin(cin);
istream_iterator<int> dataEnd;
vector<int> v(dataBegin, dataEnd);
Второй способ исправить это:
vector<int> v((istream_iterator<int>(cin)), istream_iterator<int>());
мы добавляем ()
вокруг первого элемента, который сообщает компилятору, что это глагол, а не параметр, поэтомувторой элемент тоже должен быть глаголом.Вот и все.