0 / 0 / 0
Регистрация: 10.09.2020
Сообщений: 11
|
||||||||||||||||
1 | ||||||||||||||||
Функция с переменным числом аргументов11.09.2020, 01:06. Показов 3218. Ответов 2
Решаю задачи, задача: напишите функцию print_values с переменным числом аргументов, которая для каждого аргумента выводит его тип и значение в поток std::ostream, который ей передан в качестве первого аргумента. Функция должна работать с произвольным числом аргументов.
Указание: для вывода имени типа нужно использовать std::type_info::name. Например, вызов функции
Код
i: 0 d: 3.5 PKc: Hello
Где только можно проверила, везде работает, а где надо, показывает ошибку: Код
Compilation error main.cpp: In function ‘bool compare(std::__cxx11::string, std::__cxx11::string)’: main.cpp:48:59: error: no matching function for call to ‘remove_if(std::__cxx11::basic_string<char>::iterator, std::__cxx11::basic_string<char>::iterator, <unresolved overloaded function type>)’ s1.erase(std::remove_if(s1.begin(), s1.end(), &isspace), s1.end()); ^ In file included from /usr/include/c++/6/algorithm:62:0, from main.cpp:34: /usr/include/c++/6/bits/stl_algo.h:926:5: note: candidate: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate) remove_if(_ForwardIterator __first, _ForwardIterator __last, ^~~~~~~~~ /usr/include/c++/6/bits/stl_algo.h:926:5: note: template argument deduction/substitution failed: main.cpp:48:59: note: couldn't deduce template parameter ‘_Predicate’ s1.erase(std::remove_if(s1.begin(), s1.end(), &isspace), s1.end()); ^ main.cpp:49:59: error: no matching function for call to ‘remove_if(std::__cxx11::basic_string<char>::iterator, std::__cxx11::basic_string<char>::iterator, <unresolved overloaded function type>)’ s2.erase(std::remove_if(s2.begin(), s2.end(), &isspace), s2.end()); ^ In file included from /usr/include/c++/6/algorithm:62:0, from main.cpp:34: /usr/include/c++/6/bits/stl_algo.h:926:5: note: candidate: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate) remove_if(_ForwardIterator __first, _ForwardIterator __last, ^~~~~~~~~ /usr/include/c++/6/bits/stl_algo.h:926:5: note: template argument deduction/substitution failed: main.cpp:49:59: note: couldn't deduce template parameter ‘_Predicate’ s2.erase(std::remove_if(s2.begin(), s2.end(), &isspace), s2.end()); Добавлено через 21 минуту Кто наткнется на эту задачу в процессе обучения, удалите
0
|
11.09.2020, 01:06 | |
Ответы с готовыми решениями:
2
Рекурсивная функция с переменным числом аргументов на С++98 Шаблонная функция с переменным числом аргументов Функция с переменным числом аргументов (через шаблоны) Функции с переменным числом аргументов |
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
|
|
11.09.2020, 01:41 | 2 |
Никаких ошибок в вашем коде нет. Непонятно только, почему две первые версии вашей функции вдруг зачем-то возвращают некий
int .Если вы использовали какой-то странный компилятор/окружение, то его нужно детально описывать. Без этого ваш рассказ малополезен. Очевидно те, кто писал тестовую "обвязку" для студенческого кода, не приняли во внимание, что в стандартной библиотеке есть несколько функций isspace : в <cctype> и в <locale> .Но за using namespace std; надо в любом случае бить по рукам.
0
|
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
|
||||||
11.09.2020, 03:23 | 3 | |||||
Если есть возможность использовать c++17, можно так:
1
|
11.09.2020, 03:23 | |
11.09.2020, 03:23 | |
Помогаю со студенческими работами здесь
3
Шаблоны с переменным числом аргументов Функции с переменным числом аргументов Написать функцию с переменным числом аргументов GCC и функции с переменным числом аргументов Инициализация std::tuple переменным числом аргументов Шаблон с переменным числом аргументов, и возвращаемое значение функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |