Есть небольшая программа, которая должна выполнять следующее:
Вопрос: как сделать эти массивы из первой процедуры видимыми для второй процедуры без объявления глобальных переменных?
Все процедуры записаны в Widget.cpp, в main.cpp ничего не добавлялось.
хммм, а почему нельзя делать массив глобальным (для данного класса)? еще конечно подумаю, но пока мне кажется никак.
После того как первая функция от первого нажатия кнопки отработает, массивы созданные в этой функции уничтожатся... И какой к ним может быть доступ из другой функции??? (плин ну область видимости и сроки жизни переменных основы жа си )))) )
Определить их как члены класса(ну хотяп того же виджета) и всего делов, правда придётся делать их динамическими...
Вызывать одну функцию из другой и передавать массивы в качестве аргументов :)
Видимо так и придется, через глобальные массивы делать.
to killer, в данном случае, как засунуть одну функцию в другую я не знаю, так как алгоритм работы следующий:
Тоесть мне видится, что процедуры 1,2,3 в этом случае должны быть разными, а массивы, результаты процедуры 1, необходимо сделать доступными из процедур 2 и 3.
to Жюстина, про время жизна переменных я уже знаю, вот и спрашивал, как для некоторых переменных его можно продлить, и как потом очистить память от этих продлённых. Да и С++ я только начинаю осваивать и пробелов ещё море). Массивы эти как бы и не массивы а списки списков, мне так показалось удобнее в данном случае, так как можно в процессе работы дописывать элементы не создавая дополнительных промежуточных массивов.
В любом случае при таком "продлении" будут указатели внешние не из функций ))))
А можно и извратиться, связать с сигналами кнопок одну и ту же функцию, с условием внутри, проверки, что её вызвало, и static массивами )))))))))) но ето извращениееее )))))
Таким образом, сначала глобальная переменная описывается в widget.h, затем используется в теле программы? А каким образом можно те же массивы передать другой программе без использования внешних файлов?
Ну идейка же простая ))) Только сразу предупреждаю ТУПАЯ она
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а
}
}
Вот так можно ещё пошутить над теми кто потом будет код смотреть ))))
А вообще переменную класса надо создавать...
Спасибо большое, буду штудировать литературу по поводу переменных класса). Создам глобальную переменную. А по поводу передачи данных в другую программу, как это можно реализовать не выкидывая данные из памяти?
Из одной программы в другую? Да ещё и ничего не испортить?
Мне каццо тут вирусописатель под линукс зарождается ))))
А вообще нужно сначала узнать из какой программы в какую, передача данных предусмотрена вообще-то, но не так, чтоб просто взять и в память другого процесса залезть безнаказанно ))))
Ну идея такая, есть КЭ пре-пост, я пытаюсь написать решатель. Так вот, решателей может быть несколько и хотелось бы наладить передачу массивов между ними. Сейчас самым распространённым способом является передача через файлы, записываемые на диск, и интересно, можно ли передавать между процессами эти массивы напрямую.
Тоесть, к примеру, одна часть решателя отработала и выдала сообщение, что массив готов, вторая часть ждёт этого сигнала и при его появлении получает доступ к этому массиву и продолжает решать, в то время как первая ждёт сигнал и массив от него.
У qt есть хорошая реализация плагинов )))
Каких плагинов?
Ня и Ой
)))) спасибо) Ня мне особенно понравилась))
Отправить комментарий