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

Компилятор не находит std::ref()

02.01.2015, 11:48. Показов 1663. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет и с новым годом.

Столкнулся со странным.

Сейчас сижу разбираюсь с потоками, а точнее пытаюсь передать в поток указатели на глобальные переменные.

Подключил #include <functional>, но почемуто ни QT ни компилятор не могут обнаружить функцию std::ref().

Никак не могу найти причину, помогите разобраться.

Код следующий:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <functional>
#include <chrono>
#include <thread>
#include <mutex>
#include <errno.h>
 
#include <query_class.h>
#include <class_compare_buf_db.h>
 
 
using namespace std;
 
vector<vector<string> > buf_logic_val  ;
vector<vector<string> > buf_cash       ;
vector<vector<string> > buf_reg        ;
 
vector<vector<string> > addr_buf_logic_val  ;
vector<vector<string> > addr_buf_cash       ;
vector<vector<string> > addr_buf_reg        ;
 
mutex _lock;
 
/* Проверяет буфер на наличие изменений, записывает изменения в базу данных */
void *compare_buf_db_ph (vector<vector<string> > &buf_logic_val, vector<vector<string> > &buf_cash, vector<vector<string> > &buf_reg, vector<vector<string> > &addr_buf_logic_val, vector<vector<string> > &addr_buf_cash, vector<vector<string> > &addr_buf_reg)
{
    try
    {
        while (1)
        {
            if (_lock.try_lock() == true)
            {
                class_compare_buf_db buffer_class;
                buffer_class.buf_cash           = buf_cash              ;
                buffer_class.buf_logic_val      = buf_logic_val         ;
                buffer_class.buf_reg            = buf_reg               ;
                buffer_class.addr_buf_cash      = addr_buf_cash        ;
                buffer_class.addr_buf_logic_val = addr_buf_logic_val   ;
                buffer_class.addr_buf_reg       = addr_buf_reg         ;
                buffer_class.index_db();
                _lock.unlock();
                cout << "Ждём таймер" <<endl;
                struct timespec tw = {1,1};
                struct timespec tr;
                nanosleep(&tw,&tr);
 
            }
 
 
        }
    }
 
    catch (std::exception& e)
    {
        std::cerr << "Возникло исключение : " << e.what() << std::endl;
    }
 
    return 0;
}
 
 
 
//* Инициализация буферов, инициализация потоков */
int main()
{
    cout << "Функция main запущена" << endl;
    query_class q;
    q.query         = "SELECT id_sens_values, id_sens_type,logic_name, value, timestamp, id_reg_complex, address, description, complex_logic_name,ch_flag FROM list_logic_sens_values";
    q.fields        = {"id_sens_values", "id_sens_type","logic_name", "value", "timestamp", "id_reg_complex", "address", "description", "complex_logic_name","ch_flag"};
    q.select();
    buf_logic_val   = q.result;
    addr_buf_logic_val = q.result;
 
    cout << "Логические значения проинициализированы" << endl;
 
    q.query         = "SELECT id_sens_values, id_sens_type,logic_name, value, timestamp, address, description, id_reg_complex, ch_flag, ch_flag_back FROM list_hard_sens_values_cash";
    q.fields        = {"id_sens_values", "id_sens_type","logic_name", "value", "timestamp", "address", "description", "id_reg_complex","ch_flag","ch_flag_back"};q.select();
    buf_cash        = q.result;
    addr_buf_cash   = q.result;
    cout << "Кэш проинициализирован" << endl;
 
    q.query         = "SELECT id_sens_values, id_sens_type,logic_name, value, timestamp, address, description, id_reg_complex FROM list_hard_sens_values";
    q.fields        = {"id_sens_values", "id_sens_type","logic_name", "value", "timestamp", "id_reg_complex", "address", "description","id_reg_complex"};
    q.select();
    buf_reg         = q.result;
    addr_buf_reg    = q.result;
 
    /* Создаём потоки */
    cout << "Запускаем поток" << endl;
    std::thread compare_buf (compare_buf_db_ph, std::ref(buf_logic_val, buf_cash, buf_reg, addr_buf_logic_val, addr_buf_cash, addr_buf_reg));
    cout << "Первый поток" << endl;
    compare_buf.join();
 
 
 
 
    cout << "Завершаем выполнение демона" << endl;
    return 0;
}
И собственно ошибка

/home/fedoseev/demon/demon_bufer/dist/demon_bufer/main.cpp:134: ошибка: no matching function for call to 'ref(std::vector<std::vector<std::basic_ string<char> > >&, std::vector<std::vector<std::basic_strin g<char> > >&, std::vector<std::vector<std::basic_strin g<char> > >&, std::vector<std::vector<std::basic_strin g<char> > >&, std::vector<std::vector<std::basic_strin g<char> > >&, std::vector<std::vector<std::basic_strin g<char> > >&)'
std::thread compare_buf (compare_buf_db_ph, std::ref(buf_logic_val, buf_cash, buf_reg, addr_buf_logic_val, addr_buf_cash, addr_buf_reg));
^
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.01.2015, 11:48
Ответы с готовыми решениями:

Компилятор не понимает std::
#include &lt;iostream.h&gt; #include &lt;cstdlib.h&gt; #include &lt;math.h&gt; int main() { double a; int i; for (i = 0; i &lt; 10; ++i)...

Не находит std::to_string
Не пойму что не так, выдает ошибку Версия gcc 4.7.2-5 #include &lt;iostream&gt; #include &lt;string&gt; int main(void) { for...

Компилятор не видит std::unique_ptr
Не создается unique_ptr int main(int argc, char *argv) { QCoreApplication a(argc, argv); ...

2
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
02.01.2015, 12:27
std::ref принимает один параметр.
1
4 / 4 / 0
Регистрация: 13.10.2013
Сообщений: 183
02.01.2015, 20:33  [ТС]
А вот слона то я и не приметил)
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.01.2015, 20:33
Помогаю со студенческими работами здесь

Компилятор не находит iostream.h
библиотеки есть в папке, путь в настройках проведен нормально, но все равно выдает ошибку:

Компилятор не находит функцию GetUserName
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;locale&gt; using namespace std; BOOL GetUserName( ...

Компилятор не находит заголовочного файла iostream.h
Выдает ошибки при запуске данного кода. Скрины ошибок и того, как должен выглядеть результат прилагаются. Буду благодарен за разъяснение...

Почему std::string::find не находит подстроку?
Вот: std::string str = &quot;01234567890&quot;; int p = str.find(&quot;23&quot;, 0, 5); std::cout &lt;&lt; p; На экране моника вывод проs'а: -1...

компилятор находит неоднозначность при вызове round(i)
Доброго времени суток! Подскажите, компилятор находит неодназначтность в строке 26 *вызов функции round(i)* ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru