Определено в заголовке <stdexcept> |
||
---|---|---|
class invalid_argument; |
Свойство определяет тип бросаемого объекта как исключение.Сообщает об ошибках,возникающих из-за того,что значение аргумента не было принято.
Это исключение вызывается std::bitset::bitset
и семействами функций std::stoi
и std::stof
.
Member functions
(constructor) |
создает новый объект invalid_argument с данным сообщением(функция публичного члена) |
operator= |
заменяет объект invalid_argument (функция публичного члена) |
what |
возвращает пояснительную строку (функция публичного члена) |
std::invalid_argument::invalid_argument
invalid_argument( const std::string& what_arg ); |
(1) | |
invalid_argument( const char* what_arg ); |
(2) | (since C++11) |
(3) | ||
invalid_argument( const invalid_argument& other );
|
(until C++11) | |
invalid_argument( const invalid_argument& other ) noexcept; |
(since C++11) |
1-2) Создает объект исключения с what_arg
в качестве пояснительной строки, к которой можно получить доступ через what()
.
3) Конструктор копирования. Если *this
и other
имеют динамический тип std::invalid_argument
, то std::strcmp(what(), other.what()) == 0
(начиная с C++11).
Parameters
what_arg | — | explanatory string |
other | — | другой объект исключения для копирования |
Exceptions
Notes
Поскольку копирование std::invalid_argument
не разрешает генерировать исключения, это сообщение обычно хранится внутри как отдельно выделенная строка с подсчетом ссылок. По этой же причине нет конструктора, принимающего std::string&&
: ему бы все равно пришлось копировать содержимое.
std::invalid_argument::operator=
invalid_argument& operator=( const invalid_argument& other ); |
(until C++11) | |
invalid_argument& operator=( const invalid_argument& other ) noexcept; |
(since C++11) |
Сопоставляет содержимое с содержимым other
. Если *this
и other
имеют динамический тип std::invalid_argument
, то std::strcmp(what(), other.what()) == 0
после присваивания (начиная с C++11).
Parameters
other | — | другой объект исключения для присвоения |
Return value
*this
.
std::invalid_argument::what
virtual const char* what() const throw(); |
(until C++11) | |
virtual const char* what() const noexcept;
|
(since C++11) |
Возвращает пояснительную строку.
Parameters
(none).
Return value
Указатель на завершающуюся нулем строку с пояснительной информацией. Строка подходит для преобразования и отображения в виде std::wstring
. Указатель гарантированно действителен, по крайней мере, до тех пор, пока объект исключения, из которого он получен, не будет уничтожен, или пока не будет вызвана неконстантная функция-член (например, оператор присваивания копии) для объекта исключения.
Notes
Реализации разрешены, но не обязаны переопределять what()
.
Унаследовано от std::logic_error
Наследуется от std :: exception
Member functions
[virtual] |
уничтожает объект исключения (виртуальная публичная функция-член std::exception ) |
[virtual] |
возвращает пояснительную строку (виртуальная публичная функция-член std::exception ) |
Notes
Цель этого типа исключения аналогична условию ошибки std::errc::invalid_argument
(выброшенному в std::system_error
из функций-членов std::thread
) и связанной константе errno EINVAL
.
Example
#include <bitset> #include <iostream> #include <stdexcept> #include <string> int main() { try { std::bitset<4>{"012"}; } catch (std::invalid_argument const& ex) { std::cout << "#1: " << ex.what() << 'n'; } try { [[maybe_unused]] int f = std::stoi("ABBA"); } catch (std::invalid_argument const& ex) { std::cout << "#2: " << ex.what() << 'n'; } try { [[maybe_unused]] float f = std::stof("(3.14)"); } catch (std::invalid_argument const& ex) { std::cout << "#3: " << ex.what() << 'n'; } }
Possible output:
C++
-
std::get_terminate
Возвращает текущий установленный std::terminate_handler,который может быть нулевым указателем.
-
std::get_unexpected
Возвращает текущий установленный std::unexpected_handler,который может быть нулевым указателем.
-
std::length_error
Определяет тип объекта,который будет выброшен в качестве исключения.
-
std::logic_error
Определяет тип объекта,который будет выброшен в качестве исключения.
Разрабатывая свой код на PHP, программист может столкнуться с сообщением об ошибке «Invalid argument supplied for foreach in…». После данного сообщения обычно следует указание на её конкретику, к примеру, «/modules/tasks/todo_tasks_sub.php on line 121». Ошибка обычно обусловлена спецификой имеющегося отрезка кода, и требует проверки особенностей использования в нём переменных. Давайте разберём факторы появления ошибки, и как её можно исправить.
Содержание статьи:
- 1 Причины появления Invalid argument supplied for foreach
- 2 Как исправить ошибку «Invalid argument supplied for foreach in»
- 3 Ошибка в WordPress
- 4 Заключение
Рассматриваемая ошибка обычно возникает в ситуации, когда переменная, которую foreach пытается выполнить (повторить) не является массивом. К примеру, вы передаёте в цикл не массив, а скаляр, или вы задействуйте двойной массив, и забыли определить, как выбирается индекс.
Давайте допустим, что мы имеем функцию с именем get_user_posts. Эта функция должна возвращать массив комментариев пользователя. Однако если комментариев нет, функция возвращает логическое значение FALSE.
В приведенном выше отрезке кода мы предположили, что переменная $ posts всегда будет массивом. Однако, если функция get_user_posts возвращает логическое значение FALSE, то цикл foreach не будет работать, и PHP выведет следующее сообщение об ошибке:
Warning: Invalid argument supplied for foreach() on line 7
Как же решить указанную проблему? Давайте разбираться.
Это интересно: установка PHP 7.0.5 на Debian.
Как исправить ошибку «Invalid argument supplied for foreach in»
Решение зависит от того, для чего предназначен ваш код. То есть, если функция get_user_posts всегда должна возвращать массив, то, очевидно, вам необходимо выяснить, почему она возвращает логическое значение FALSE или значение NULL. Причиной этому может быть несколько вещей:
- Не удалось объявить пустой массив «по умолчанию» (default);
- Сбой запроса к базе данных;
- Массив перезаписывается или сбрасывается. Это часто происходит в скриптах с большим количеством массивов, когда имеются ограничения памяти, а разработчик вынужден сбрасывать массивы, с которыми он или она закончили работу.
Просматривая чей-либо код, мы можем столкнуться с API и функциями, которые возвращают значение FALSE, когда результаты отсутствуют. Если это так, то вы можете добавить следующую проверку в ваш код:
Выше мы используем функцию is_array, чтобы проверить, является ли $posts массивом. И это мы делаем ДО того, как пытаемся зациклить его с помощью конструкции foreach. Как мы уже писали, все зависит от того, каково предназначение вашего скрипта. Добавление проверки is_array неразумно в ситуации, когда есть вопросы о том будет ли переменная массивом. Ведь вы будете скрывать ошибку, которой не должно существовать.
Ошибка в WordPress
Также рассматриваемая ошибка «Invalid argument supplied for foreach in» может появляться при работе сайтов на WordPress. Проблема вызвана тем, что WP_Block_Parser выполняет несколько строковых манипуляций с substr () и strlen (), предполагая, что они работают с одиночными байтами, а не с многобайтовыми последовательностями.
Решить ошибку Invalid argument supplied for foreach в WordPress помогает изменение значения настройки mbstring.func_overload на 0 (обычно стоит 2). Сохраните произведённые изменения, и попытайтесь перейти на проблемную ранее страницу.
Если это не помогло, попробуйте скачать Вордпресс 4.9.5, вытянуть из него папку wp-includes, и скопировать в аналогичную папку на вашем хостинге. После этого WordPress может предложить обновить ваши базы данных, соглашайтесь, и всё заработает после очистки кэша.
Читайте также: множественные запросы к xmlrpc.php в WordPress.
Заключение
Ошибка «Invalid argument supplied for foreach in…» в коде PHP обычно вызвана переменной, не являющейся массивом. Последнюю пытается выполнить foreach, но безуспешно. Для решения возникшей проблемы можно добавить функцию is_array (она проверит, является ли переменная массивом). Также может порекомендовать общий ознакомительный материал на сайте phpfaq.ru, где детально разобрано, как найти ошибку в созданном вами коде.
19 / 19 / 6 Регистрация: 22.12.2012 Сообщений: 2,291 |
|
1 |
|
Windows 30.06.2021, 07:40. Показов 811. Ответов 6
Здравствуйте! Почему программа Pinnacle Stusio 9 выдает такие ошибки (скрин), когда пытаешься запустить ее через удаленный рабочий стол? Раньше работала. Переустановка Виндовс и драйверов для видеокарты не помогает. Миниатюры
0 |
19 / 19 / 6 Регистрация: 22.12.2012 Сообщений: 2,291 |
|
30.06.2021, 07:40 [ТС] |
2 |
Звук захватывает нормально.
0 |
1436 / 1013 / 228 Регистрация: 31.05.2013 Сообщений: 6,645 Записей в блоге: 6 |
|
30.06.2021, 08:14 |
3 |
morda77, программа пишет какие-то логи об ошибках? Посмотрите в каталоге установки либо в пользовательском каталоге в AppData
0 |
19 / 19 / 6 Регистрация: 22.12.2012 Сообщений: 2,291 |
|
30.06.2021, 08:50 [ТС] |
4 |
Посмотрите в каталоге установки либо в пользовательском каталоге в AppData а где это? Добавлено через 54 секунды
0 |
1436 / 1013 / 228 Регистрация: 31.05.2013 Сообщений: 6,645 Записей в блоге: 6 |
|
30.06.2021, 11:44 |
5 |
Где именно искать? C:Program FilesPinnacle Посмотрите там файлы с расширением .log
0 |
19 / 19 / 6 Регистрация: 22.12.2012 Сообщений: 2,291 |
|
30.06.2021, 21:36 [ТС] |
6 |
Matan!, Вот файлы из C:Program FilesPinnacle . Глянете? Спасибо.
0 |
1436 / 1013 / 228 Регистрация: 31.05.2013 Сообщений: 6,645 Записей в блоге: 6 |
|
01.07.2021, 02:33 |
7 |
Сюда только один файл дает загрузить Да ладно? За один раз 5 файлов можно загрузить.
https://disk.yandex.ru/d/SHoPQLjlAPtTIA Не, тут файл установки. В общем, вот что на сайте поддержки Pinnacle пишут (перевод мой): Эта ошибка также может отображаться как «недопустимый аргумент». Шаг 1. Режим совместимости Studio может быть настроена для работы в режиме совместимости, что может вызвать проблемы. Чтобы решить эту проблему, выполните следующие действия: Щелкните правой кнопкой мыши значок Studio на рабочем столе. Шаг 2. Драйверы звука Мы также обнаружили, что в некоторых случаях это вызвано проблемами со звуковыми драйверами. Проблема может быть вызвана следующими причинами: Устаревший или неподходящий драйвер звуковой карты в Windows 7. Если обновление звуковых драйверов не помогает, щелкните правой кнопкой мыши ярлык меню «Пуск» Studio и выберите «Свойства». См. Вкладку «Совместимость», если Studio настроена на работу в режиме совместимости. Если да, снимите этот флажок. Перейдите в C: Program Files Pinnacle Studio 14 Program или, если у вас 64-битная Windows 7, C: Program Files x86 Pinnacle Studio 14 Program и найдите Studio.exe. Щелкните эти файлы правой кнопкой мыши и выберите свойства. См. Вкладку «Совместимость», если Studio настроена на работу в режиме совместимости. Если да, снимите этот флажок. Теперь откройте Studio. К настоящему времени проблема должна быть решена.
0 |
Defines a type of object to be thrown as exception. It reports errors that arise because an argument value has not been accepted.
This exception is thrown by std::bitset::bitset, and the std::stoi and std::stof families of functions.
Inheritance diagram
Contents
- 1 Member functions
- 2 std::invalid_argument::invalid_argument
- 2.1 Parameters
- 2.2 Exceptions
- 2.3 Notes
- 3 std::invalid_argument::operator=
- 3.1 Parameters
- 3.2 Return value
- 3.3 Notes
- 4 Inherited from std::logic_error
- 5 Inherited from std::exception
- 5.1 Member functions
- 5.2 Notes
- 5.3 Example
- 5.4 Defect reports
[edit] Member functions
constructs a new invalid_argument object with the given message (public member function) |
|
replaces the invalid_argument object (public member function) |
std::invalid_argument::invalid_argument
invalid_argument( const std::string& what_arg ); |
(1) | |
invalid_argument( const char* what_arg ); |
(2) | |
(3) | ||
invalid_argument( const invalid_argument& other ); |
(until C++11) | |
invalid_argument( const invalid_argument& other ) noexcept; |
(since C++11) | |
1) Constructs the exception object with what_arg as explanatory string. After construction, std::strcmp(what(), what_arg.c_str()) == 0.
2) Constructs the exception object with what_arg as explanatory string. After construction, std::strcmp(what(), what_arg) == 0.
3) Copy constructor. If *this and other both have dynamic type std::invalid_argument
then std::strcmp(what(), other.what()) == 0. No exception can be thrown from the copy constructor. (until C++11)
Parameters
what_arg | — | explanatory string |
other | — | another exception object to copy |
Exceptions
Notes
Because copying std::invalid_argument
is not permitted to throw exceptions, this message is typically stored internally as a separately-allocated reference-counted string. This is also why there is no constructor taking std::string&&
: it would have to copy the content anyway.
Before the resolution of LWG issue 254, the non-copy constructor can only accept std::string. It makes dynamic allocation mandatory in order to construct a std::string object.
After the resolution of LWG issue 471, a derived standard exception class must have a publicly accessible copy constructor. It can be implicitly defined as long as the explanatory strings obtained by what()
are the same for the original object and the copied object.
std::invalid_argument::operator=
invalid_argument& operator=( const invalid_argument& other ); |
(until C++11) | |
invalid_argument& operator=( const invalid_argument& other ) noexcept; |
(since C++11) | |
Assigns the contents with those of other. If *this and other both have dynamic type std::invalid_argument
then std::strcmp(what(), other.what()) == 0 after assignment. No exception can be thrown from the copy assignment operator. (until C++11)
Parameters
other | — | another exception object to assign with |
Return value
*this
Notes
After the resolution of LWG issue 471, a derived standard exception class must have a publicly accessible copy assignment operator. It can be implicitly defined as long as the explanatory strings obtained by what()
are the same for the original object and the copied object.
Inherited from std::logic_error
Inherited from std::exception
Member functions
destroys the exception object (virtual public member function of std::exception ) [edit]
|
|
returns an explanatory string (virtual public member function of std::exception ) [edit]
|
[edit] Notes
The purpose of this exception type is similar to the error condition std::errc::invalid_argument (thrown in std::system_error from member functions of std::thread) and the related errno constant EINVAL.
[edit] Example
#include <bitset> #include <iostream> #include <stdexcept> #include <string> int main() { try { std::bitset<4>{"012"}; // Throws: only '0' or '1' expected } catch (std::invalid_argument const& ex) { std::cout << "#1: " << ex.what() << 'n'; } try { [[maybe_unused]] int f = std::stoi("ABBA"); // Throws: no conversion } catch (std::invalid_argument const& ex) { std::cout << "#2: " << ex.what() << 'n'; } try { [[maybe_unused]] float f = std::stof("(3.14)"); // Throws: no conversion } catch (std::invalid_argument const& ex) { std::cout << "#3: " << ex.what() << 'n'; } }
Possible output:
#1: bitset string ctor has invalid argument #2: stoi: no conversion #3: stof: no conversion
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 254 | C++98 | the constructor accepting const char* was missing | added |
LWG 471 | C++98 | the explanatory strings of std::invalid_argument ‘scopies were implementation-defined |
they are the same as that of the original std::invalid_argument object
|
Разрабатывая свой код на PHP, программист может столкнуться с сообщением об ошибке «Invalid argument supplied for foreach in…». После данного сообщения обычно следует указание на её конкретику, к примеру, «/modules/tasks/todo_tasks_sub.php on line 121». Ошибка обычно обусловлена спецификой имеющегося отрезка кода, и требует проверки особенностей использования в нём переменных. Давайте разберём факторы появления ошибки, и как её можно исправить.
Содержание
- Причины появления Invalid argument supplied for foreach
- Как исправить ошибку «Invalid argument supplied for foreach in»
- Ошибка в WordPress
- Заключение
Причины появления Invalid argument supplied for foreach
Рассматриваемая ошибка обычно возникает в ситуации, когда переменная, которую foreach пытается выполнить (повторить) не является массивом. К примеру, вы передаёте в цикл не массив, а скаляр, или вы задействуйте двойной массив, и забыли определить, как выбирается индекс.
Давайте допустим, что мы имеем функцию с именем get_user_posts. Эта функция должна возвращать массив комментариев пользователя. Однако если комментариев нет, функция возвращает логическое значение FALSE.
В приведенном выше отрезке кода мы предположили, что переменная $ posts всегда будет массивом. Однако, если функция get_user_posts возвращает логическое значение FALSE, то цикл foreach не будет работать, и PHP выведет следующее сообщение об ошибке:
Warning: Invalid argument supplied for foreach() on line 7
Как же решить указанную проблему? Давайте разбираться.
Как исправить ошибку «Invalid argument supplied for foreach in»
Решение зависит от того, для чего предназначен ваш код. То есть, если функция get_user_posts всегда должна возвращать массив, то, очевидно, вам необходимо выяснить, почему она возвращает логическое значение FALSE или значение NULL. Причиной этому может быть несколько вещей:
- Не удалось объявить пустой массив «по умолчанию» (default);
- Сбой запроса к базе данных;
- Массив перезаписывается или сбрасывается. Это часто происходит в скриптах с большим количеством массивов, когда имеются ограничения памяти, а разработчик вынужден сбрасывать массивы, с которыми он или она закончили работу.
Просматривая чей-либо код, мы можем столкнуться с API и функциями, которые возвращают значение FALSE, когда результаты отсутствуют. Если это так, то вы можете добавить следующую проверку в ваш код:
Выше мы используем функцию is_array, чтобы проверить, является ли $posts массивом. И это мы делаем ДО того, как пытаемся зациклить его с помощью конструкции foreach. Как мы уже писали, все зависит от того, каково предназначение вашего скрипта. Добавление проверки is_array неразумно в ситуации, когда есть вопросы о том будет ли переменная массивом. Ведь вы будете скрывать ошибку, которой не должно существовать.
Ошибка в WordPress
Также рассматриваемая ошибка может появляться при работе сайтов на WordPress. Проблема вызвана тем, что WP_Block_Parser выполняет несколько строковых манипуляций с substr () и strlen (), предполагая, что они работают с одиночными байтами, а не с многобайтовыми последовательностями.
Решить ошибку Invalid argument supplied for foreach в WordPress помогает изменение значения настройки mbstring.func_overload на 0 (обычно стоит 2). Сохраните произведённые изменения, и попытайтесь перейти на проблемную ранее страницу.
Если это не помогло, попробуйте скачать Вордпресс 4.9.5, вытянуть из него папку wp-includes, и скопировать в аналогичную папку на вашем хостинге. После этого WordPress может предложить обновить ваши базы данных, соглашайтесь, и всё заработает после очистки кэша.
Заключение
Ошибка «Invalid argument supplied for foreach in…» в коде PHP обычно вызвана переменной, не являющейся массивом. Последнюю пытается выполнить foreach, но безуспешно. Для решения возникшей проблемы можно добавить функцию is_array (она проверит, является ли переменная массивом). Также может порекомендовать общий ознакомительный материал на сайте phpfaq.ru, где детально разобрано, как найти ошибку в созданном вами коде.