2 / 2 / 3
Регистрация: 07.10.2013
Сообщений: 48

Ошибка при передаче двумерного массива в функцию std::thread

07.06.2014, 16:31. Показов 1733. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Написал программу на потоки, теперь нужно передать туда двумерный массив.
Пытаюсь передать по ссылке, но каждый раз выскакивает это сообщение:
error C2664: "void (int **,int,int)": невозможно преобразовать аргумент 1 из "int" в "int **"

Если кто-нибудь знает, как исправить, подскажите.
Заранее спасибо!

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
#include "stdafx.h"
#include <functional>
#include <stdio.h>
#include <thread>
#include <chrono>
#include <iostream>
#include <mutex>
#include <vector>
 
#define size 1000
 
int arr[size][size];
int sum;
int mid;
 
std::mutex                          g_lock;
std::mutex                          g_mutex;
std::vector<std::exception_ptr>     g_exceptions;
 
/* Функция, выполняющая поток */
void threadFunction(int** a, int begin_ct, int end_ct){
 
    std::cout << "Присоединяюсь к потоку " << std::this_thread::get_id() << std::endl;
    
    int z;
    int v;
    for (z = begin_ct; z <= end_ct; ++z){
        for (v = begin_ct; v <= end_ct; ++v){
            sum = sum + a[z][v];
        }
    }
    std::this_thread::sleep_for(std::chrono::seconds(rand() % 10));
    std::cout << "Покидаю поток " << std::this_thread::get_id() << std::endl;
 
}
 
/* Главная функция программы */
int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    int j;
    /* Создание массива данных*/
    std::cout << "Программа находит среднее арифметическое двумерного массива из " << size << " x " << size<< " элементов";
    std::cout << "Статус программы:";
    for (i = 0; i <= size; i++){
        for (j = 0; j <= size; j++){
            arr[i][j] = rand() % (1000);
        }
    }
    std::cout << "Cоздание массива завершено";
 
    /* Создание потоков и передача данных в них*/
    std::thread thr1(threadFunction, std::ref(arr[i][j]), 0, size / 4);
    std::thread thr2(threadFunction, std::ref(arr[i][j]), size / 4, size / 2);
    std::thread thr3(threadFunction, std::ref(arr[i][j]), size / 2, 3 * size / 4);
    std::thread thr4(threadFunction, std::ref(arr[i][j]), 3 * size / 4, size);
 
    /* Присоединение к потокам */
    thr1.join();
    thr2.join();
    thr3.join();
    thr4.join();
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2014, 16:31
Ответы с готовыми решениями:

Ошибка при передаче двумерного массива в функцию
Помогите пожалуйста, никак не могу разобраться. Я хочу чтобы функция createBlankGameField() ввела данные в массив gameField созданный в...

Ошибка при передаче двумерного массива в функцию
cannot convert 'int (*)' to 'int**' for argument '1' to 'void func(int**, int, int)' #include&lt;iostream&gt; using namespace std; ...

Ошибка при передаче в функцию указателя на элемент массива
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; const int n = 20; int...

3
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
07.06.2014, 16:35
Ты передаешь в поток ссылку на элемент массива, а пытаешься получить двойной указатель.

Добавлено через 1 минуту
+ в 47-й строке выход за пределы массива.
0
2 / 2 / 3
Регистрация: 07.10.2013
Сообщений: 48
07.06.2014, 16:39  [ТС]
Спасибо за ответ! Теперь я передаю не элемент массива, а весь массив( std::ref(arr) ), но выдаёт уже другую ошибку: "error C2090: функция возвращает массив". Как её устранить?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
07.06.2014, 16:53
Попробуй убрать std::ref.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2014, 16:53
Помогаю со студенческими работами здесь

Трабл в передаче двумерного массива в функцию!
--------------------- void input (int **a, int n, int m); void output (int **a, int n, int m); --------------------- int _tmain(int...

Написать процедуру для суммирования матриц. Ошибка при передаче массива в функцию
Помогите пожалуйста! Дано задание: Написать процедуру для суммирования матриц. С ее помощью сложить исходную матрицу и...

Ошибка при создании потока std::thread
Внутри класса есть функция void move(); Нужно, чтобы она работала в отдельном потоке. Проблема : неправильно указываю параметры....

Одинаково ли быстродействие: 1. при передаче параметров в функцию или 2. создание кортежа и передаче его в функцию?
Одинаково ли быстродействие: 1. при передаче параметров в функцию или 2. создание кортежа и передаче его в функцию? Зависит ли это от...

Ошибка при передаче строк в функцию, ошибка при формировании дерева
Курсовой проект, в основе база данных, данные записываются в двоичное дерево. Есть 2 проблемы: 1) Если я считываю структуру с файла...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru