| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > signal в классе С++ |
| Автор: fray 21.10.2008, 15:21 | ||||
| Вобщем проблема такая. есть класс. в котором я пытаюсь установить сигнал и по сигналу получать дуступ к переменной класса, но переменные класса не видятся внутри хендлера сигнала, о чем мне говорит компилятор, undeclared 'std::list <int> L' в функции handler()
попытки лечит extarnal "C" { handler() {....} }, указание хендлера как static, результат тотже функция singal кушает хендлер но компилетр ругается что undeclared 'std::list <int> L' в функции handler(), может кто-то решал такую же проблему ? вроде бы решаемо если
Но это уже как-то не похоже на С++. Спасибо. |
| Автор: mes 21.10.2008, 15:28 |
static - функции не видят членов класса |
| Автор: fray 21.10.2008, 15:32 | ||||
А если сделать лист глобальным, будет работать ?
|
| Автор: vTictor 21.10.2008, 16:18 | ||
лучше в метод передавать ссылку или указатель на лист. А вообще, может у тебя и в исходниках опечятка и вместо signal написано singal ?? |
| Автор: fray 21.10.2008, 16:57 | ||||
да там опечатка, там signal который принуждает передавать аргумент handler'у тока int поэтому не удасться передать ему ссылку на лист. |
| Автор: mes 21.10.2008, 17:54 |
будет. Signal имеет сишное происхождение, поэтому использовать наряду с классами напрямую не получится, так как не понятно какому из объектов переселать статический сигнал. В классе можно определить статическую проксифункцию для принятия сигнала, а также добавить функции для регистрации обьектов, которые хотят получать этот сигнал. В общем все зависит от того чего конкретно Вы хотите добиться. (в приведенных выше описаниях не хватает как минимум слова объект, чтоб понять Вашу идею) |
| Автор: fray 22.10.2008, 10:55 | ||
Просто хотелось иметь Класс как замкнутый объект с внутренней переменой list L; и соотвественно иметь внутренний хендлер сигнала... и тд. и тп. также соая ситуация упрощается тем что я имею только один объект(Class Test), ну вобщем понятно раз функция сишная, то и писать придется по сишному. |