Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89

Не существует подходящего конструктора для преобразования из "void" в "std::function<void ()>"

14.12.2021, 23:00. Показов 3512. Ответов 13

Студворк — интернет-сервис помощи студентам
Итак, имеется следующий класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#pragma once
#include <chrono>
#include <functional>
#include <thread>
#include <iostream>
using namespace std;
 
class Timer {
public:
    Timer();
    void add(std::chrono::milliseconds delay,
        std::function<void()> callback,
        bool asynchronous = true);
};
 
 
 
Timer::Timer() {
}
void Timer::add(chrono::milliseconds delay,
    function<void()> callback,
    bool asynchronous) {
    if (asynchronous) {
        std::thread([=]() {
            std::this_thread::sleep_for(std::chrono::milliseconds(delay));
            callback();
            }).detach();
    }
    else {
        std::this_thread::sleep_for(std::chrono::milliseconds(delay));
        callback();
    }
}
Он работает только при передачи в параметры функции, в которой нет параметров. Пример вызова:
Есть
C++
1
2
3
4
void terminal_setfree()
{
    //что-то робит
}
А в мєйне поступаем след. образом:
C++
1
timer.add(chrono::seconds(5), terminal_setfree);
При таком вызове чувствует себя отлично. Но мне нужно в эту самую terminal_setfree() передать параметр(вектор)... А в классе такой конструктор не перегружен.. Честно, с таким ещё дело не имел(чтобы функцию в качестве параметров передавать), поэтому не в курсе. Хэлп
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2021, 23:00
Ответы с готовыми решениями:

Не существует подходящего конструктора для преобразования
Здравствуйте, возникла ошибка. Сама ошибка: E0415 не существует подходящего конструктора для преобразования из...

Error C2664: невозможно преобразовать аргумент 3 из "_Ty" в "std::function<void (void)>"
Не получается передать в функцию объект класса Button, ибо выдает следующее: c:\program files (x86)\microsoft visual...

Дописать методы void pop_back(void); T& back(void); T& front(void); void erase (iterator p)
Задали задание, и не получается дописать оставшиеся методы: void pop_back(void); T&amp; back(void); T&amp; front(void); void erase...

13
фрилансер
 Аватар для Алексей1153
6455 / 5657 / 1129
Регистрация: 11.10.2019
Сообщений: 15,074
14.12.2021, 23:19
McVilka, так ?

std::function<void(const std::vector<нужныйтип>&)>

Добавлено через 59 секунд
McVilka, только при чём тут конструктор?
0
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89
14.12.2021, 23:22  [ТС]
Почему-то всё еще не работает..
Точно, не конструктор. Метод класса
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
14.12.2021, 23:24
Цитата Сообщение от McVilka Посмотреть сообщение
Но мне нужно в эту самую terminal_setfree() передать параметр(вектор)...
Ничего не понял. У terminal_setfree() нет параметров. В нее невозможно "передать параметр(вектор)".

Если вам в нее нужно "передать параметр(вектор)", то почему вы ее объявили без параметров?
0
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89
15.12.2021, 00:20  [ТС]
Это я показал как работает.
А если так, как мне надо, то вот:
C++
1
2
3
4
void terminal_setfree(vector<Workstation>& vec)
{
    //делаем что нужно
}
В мэйне:
C++
1
2
Timer timer;
            timer.add(chrono::seconds(10), terminal_setfree(stations));
Но как раз в таком случаем и начинает ругаться. Подходит только если туда ничего не передавать
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
15.12.2021, 00:50
Лучший ответ Сообщение было отмечено McVilka как решение

Решение

Цитата Сообщение от McVilka Посмотреть сообщение
timer.add(chrono::seconds(10), terminal_setfree(stations));
C++
1
timer.add(chrono::seconds(10), [&stations]{ terminal_setfree(stations); });
1
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89
15.12.2021, 01:03  [ТС]
Да! Наконец-то работает)
Можете, пожалуйста, объяснить как и почему?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
15.12.2021, 01:19
Цитата Сообщение от McVilka Посмотреть сообщение
Можете, пожалуйста, объяснить как и почему?
Может лучше книжку почитаете по С++?
Я, лучше чем в книге, объяснить не смогу.
Ну и графоманией не страдаю, чтобы даже пытаться, извини...
1
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89
15.12.2021, 18:34  [ТС]
Я дииииико извиняюсь... Но можно ли теперь то же самое провернуть, но с двумя параметрами? Вот такими:
C++
1
timer.add(chrono::seconds(10), [&stations]{ terminal_setfree(stations, pc); });
Добавлено через 20 минут
Разобрался, не ругайте!...
C++
1
2
int* ptr = &pc;
            timer.add(chrono::seconds(5), [&stations, ptr] {terminal_setfree(stations, ptr);});
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
15.12.2021, 18:46
Цитата Сообщение от McVilka Посмотреть сообщение
Разобрался, не ругайте!...
Не понял. Почему передается некий ptr, если надо было передать pc?
0
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89
15.12.2021, 18:48  [ТС]
Ну я попробовал создать на него указатель- получилось
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
15.12.2021, 18:59
Цитата Сообщение от McVilka Посмотреть сообщение
Ну я попробовал создать на него указатель- получилось
Мало ли что получилось...

Со stations вы указатель не создавали? Нет. Почему вдруг здесь возникла идея создать указатель?
0
0 / 0 / 0
Регистрация: 16.01.2021
Сообщений: 89
15.12.2021, 19:01  [ТС]
Ну, я как рассуждал: в случае со stations мы передавали указатель на первый элемент массива. Решил и тут попробовать указатель. Короче не знаю, просто не работало
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,222
15.12.2021, 19:31
Цитата Сообщение от McVilka Посмотреть сообщение
в случае со stations мы передавали указатель на первый элемент массива.
???

Какой указатель? Где вы увидели указатель в случае со stations?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2021, 19:31
Помогаю со студенческими работами здесь

System.Void из C# использоваться не может - для получения объекта типа void используйте typeof (void)
Изучаю с# по &quot;Шилдт Г. - C# 4.0 полное руководство&quot; При изучении конструктора возникла проблема: попытался запустить код на стр. 169, а...

Error LNK2019: unresolved external symbol _glutSwapBuffers@0 referenced in function "void __cdecl Draw(void)"
Здраствуйте. У меня проблема такая, выдает ошибку ссылка на неразрешенный внешний символ, сам я в c++ диллетант, помогите, может в коде...

не существует подходящего конструктора для преобразования из "students*" в "Examsstudents"
#include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;string&gt; #include &lt;typeinfo&gt; #include &quot;resource.h&quot; #include &quot;students.h&quot; ...

Ошибка "не существует подходящего конструктора для преобразования из hostent* в hostent"
пишу в точности как здесь https://msdn.microsoft.com/en-us/library/windows/desktop/ms738521(v=vs.85).aspx а компилятор выдает ошибку...

Не существует подходящего конструктора для преобразования из "long" в "MyShell"
Объявляю структуру: struct MyShell { int xShell_1; int yShell_1; int xShell_2; int yShell_2; };


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru