Как сделать массивы из одной процедуры доступными в другой?

Есть небольшая программа, которая должна выполнять следующее:

  • Считать данные из файла по нажатию кнопки и сохранить данные в два двухмерных массива.
  • После нажатия второй кнопки другая процедура должна используя данные из массивов созданных предыдущей процедурой выполнить некоторые действия.

Вопрос: как сделать эти массивы из первой процедуры видимыми для второй процедуры без объявления глобальных переменных?
Все процедуры записаны в Widget.cpp, в main.cpp ничего не добавлялось.

0
tigris - 21 Март, 2011 - 23:59
Изображение пользователя tigris.

хммм, а почему нельзя делать массив глобальным (для данного класса)? еще конечно подумаю, но пока мне кажется никак.

0
Жюстина - 22 Март, 2011 - 07:08
Изображение пользователя Жюстина.

После того как первая функция от первого нажатия кнопки отработает, массивы созданные в этой функции уничтожатся... И какой к ним может быть доступ из другой функции??? (плин ну область видимости и сроки жизни переменных основы жа си )))) )

Определить их как члены класса(ну хотяп того же виджета) и всего делов, правда придётся делать их динамическими...

0
killer - 22 Март, 2011 - 12:21

Вызывать одну функцию из другой и передавать массивы в качестве аргументов :)

0
romanoffff - 22 Март, 2011 - 12:47

Видимо так и придется, через глобальные массивы делать.
to killer, в данном случае, как засунуть одну функцию в другую я не знаю, так как алгоритм работы следующий:

  • нажал кнопку 1, процедура 1 считывает файл и сохраняет его содержимое в два массива
  • нажал кнопку 2, процедура 2 должна обработать данные массива одним образом
  • нажал кнопку 3, процедура 3 должна обработать данные массива вторым образом

Тоесть мне видится, что процедуры 1,2,3 в этом случае должны быть разными, а массивы, результаты процедуры 1, необходимо сделать доступными из процедур 2 и 3.
to Жюстина, про время жизна переменных я уже знаю, вот и спрашивал, как для некоторых переменных его можно продлить, и как потом очистить память от этих продлённых. Да и С++ я только начинаю осваивать и пробелов ещё море). Массивы эти как бы и не массивы а списки списков, мне так показалось удобнее в данном случае, так как можно в процессе работы дописывать элементы не создавая дополнительных промежуточных массивов.

0
Жюстина - 22 Март, 2011 - 15:07
Изображение пользователя Жюстина.

В любом случае при таком "продлении" будут указатели внешние не из функций ))))

А можно и извратиться, связать с сигналами кнопок одну и ту же функцию, с условием внутри, проверки, что её вызвало, и static массивами )))))))))) но ето извращениееее )))))

0
romanoffff - 22 Март, 2011 - 15:11

Таким образом, сначала глобальная переменная описывается в widget.h, затем используется в теле программы? А каким образом можно те же массивы передать другой программе без использования внешних файлов?

0
Жюстина - 22 Март, 2011 - 15:23
Изображение пользователя Жюстина.

Ну идейка же простая ))) Только сразу предупреждаю ТУПАЯ она

big_function(int);

button1_click()
{
   big_function(1);
}

button2_click()
{
   big_function(2);
}

button3_click()
{
   big_function(3);
}

big_function(int a)
{
static int massiv[10][10];
switch(a){
case:1
// читать файл в массив massiv
break;
case:2
// обработка 1 massivа
break;
case:3
// обработка 2 massivа
}
}

Вот так можно ещё пошутить над теми кто потом будет код смотреть ))))

А вообще переменную класса надо создавать...

0
romanoffff - 22 Март, 2011 - 15:34

Спасибо большое, буду штудировать литературу по поводу переменных класса). Создам глобальную переменную. А по поводу передачи данных в другую программу, как это можно реализовать не выкидывая данные из памяти?

0
Жюстина - 22 Март, 2011 - 15:43
Изображение пользователя Жюстина.

Из одной программы в другую? Да ещё и ничего не испортить?

Мне каццо тут вирусописатель под линукс зарождается ))))

А вообще нужно сначала узнать из какой программы в какую, передача данных предусмотрена вообще-то, но не так, чтоб просто взять и в память другого процесса залезть безнаказанно ))))

0
romanoffff - 22 Март, 2011 - 15:50

Ну идея такая, есть КЭ пре-пост, я пытаюсь написать решатель. Так вот, решателей может быть несколько и хотелось бы наладить передачу массивов между ними. Сейчас самым распространённым способом является передача через файлы, записываемые на диск, и интересно, можно ли передавать между процессами эти массивы напрямую.

0
romanoffff - 22 Март, 2011 - 15:53

Тоесть, к примеру, одна часть решателя отработала и выдала сообщение, что массив готов, вторая часть ждёт этого сигнала и при его появлении получает доступ к этому массиву и продолжает решать, в то время как первая ждёт сигнал и массив от него.

+1
Жюстина - 22 Март, 2011 - 16:00
Изображение пользователя Жюстина.

У qt есть хорошая реализация плагинов )))

0
romanoffff - 22 Март, 2011 - 16:02

Каких плагинов?

+1
Жюстина - 22 Март, 2011 - 16:22
Изображение пользователя Жюстина.

Ня и Ой

0
romanoffff - 22 Март, 2011 - 16:46

)))) спасибо) Ня мне особенно понравилась))

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры