Форум программистов, компьютерный форум CyberForum.ru

Передача метода класса в качестве параметра для метода другого класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не выходит из цикла http://www.cyberforum.ru/cpp-beginners/thread780772.html
Доброго времени суток! При нажатии цифры "1", а затем последовательно "2" z должно суммировать результат кейсов и выводить программу из цикла. Но происходит зацикливание. Не могу понять в чем ошибка, заранее большое спасибо за помощь! #include <iostream.h> int main () { double voltage=5.0, r1=100.0,r2=500.0,r3=400.0,i_1=0.0,i_2=0.0,i_3=0.0,z=0.0;
C++ Ошибка компиляции Есть проект, в котором абстрактный класс Colection, и два наследуемых Vector и Steck. При компиляции выдает ошибки: Ошибка 1 "error C2011: Colection: переопределение типа "class"" в colection.h Ошибка 2 "error C2504: Colection: не определен базовый класс" в vector.h. Что не так? colection.h #ifndef COLECTION_H #define COLEСTION_H http://www.cyberforum.ru/cpp-beginners/thread780762.html
Pointers and dynamic arrays C++
Изучаю тему указатели и динамичесские массивы в классах. Хотелось бы быть уверенным в следующих ответах: 1) Когда класс использует динамическую память, какая member функция должна ,быть обеспечена классом: a) = оператор; b) copy конструктор; c) деструктор; d) всё выше перечисленное. 2) Согласно след. утверждению:
C++ Ошибка
Помогите устранить ошибку, пожалуйста
C++ Полином от трех переменных (X, Y, Z) представить в виде циклического списка, в котором каждый узел имеет пять полей http://www.cyberforum.ru/cpp-beginners/thread780754.html
вот условие задачи: Полином от трех переменных (X, Y, Z) представить в виде циклического списка, в котором каждый узел имеет пять полей: одно - для коэффициента члена полинома, второе - для показателя степени переменной X, третье - для показателя степени переменной Y, четвертое - для показателя степени переменной Z, пятое - для указателя на следующий узел списка. Элементы списка должны быть...
C++ Запись структурной информации в файлы.Хелп! #include <iostream> #include <cstring> #include <windows.h> #include <fstream> #include <iomanip> #include <cstdlib> #include <cstring> #include <fstream> using namespace std; подробнее

Показать сообщение отдельно
rasnaut
0 / 0 / 0
Регистрация: 17.07.2008
Сообщений: 6

Передача метода класса в качестве параметра для метода другого класса - C++

06.02.2013, 21:31. Просмотров 936. Ответов 2
Метки (Все метки)

Здравствуйте,
Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог прервать любую функцию, при этом абсолютна не зная, что за функцию ему передали. Мне ничего лучше в голову не пришло, как создать класс унаследованный от QThread (использую QT, но думаю это не принципиально в данном вопросе), который мог бы получать функцию какого то класса в качестве атрибута и выполнять её в теле run(), выполнение которого он бы уже мог прервать с помощью метода terminate().
Вот какой класс у меня получился:
C++ (Qt)
1
2
3
4
5
6
7
[COLOR=#808000]class[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]Stopper[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]:[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#808000]public[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]QThread[/COLOR] [COLOR=#000000]{[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#800080]Q_OBJECT[/COLOR] [COLOR=#808000]public[/COLOR][COLOR=#000000]:[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]explicit[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]Stopper[/COLOR][COLOR=#000000]([/COLOR][COLOR=#800080]QObject[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]*[/COLOR]parent[COLOR=#c0c0c0] [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000080]0[/COLOR][COLOR=#000000]);[/COLOR]  [COLOR=#c0c0c0]    [/COLOR][COLOR=#000000]~[/COLOR][COLOR=#000000][I]Stopper[/I][/COLOR][COLOR=#000000]();[/COLOR]  [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000][I]run[/I][/COLOR][COLOR=#000000]();[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]bool[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800000]stopProcess[/COLOR][COLOR=#000000];[/COLOR][COLOR=#003900][I][/I][/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR]connectRequest[COLOR=#000000]([/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]([/COLOR]*mycallback_f[COLOR=#000000])());[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000](*[/COLOR][COLOR=#800000]callback_funk[/COLOR][COLOR=#000000])();[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]bool[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800000]getReq[/COLOR][COLOR=#000000];[/COLOR][COLOR=#808000]signals[/COLOR][COLOR=#000000]:[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR]finished[COLOR=#c0c0c0] [/COLOR][COLOR=#000000]();[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0]    [/COLOR]started[COLOR=#c0c0c0] [/COLOR][COLOR=#000000]();[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR]terminated[COLOR=#c0c0c0] [/COLOR][COLOR=#000000]();[/COLOR]   [COLOR=#808000]public[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#808000]slots[/COLOR][COLOR=#000000]:[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR]stopSignalS[COLOR=#000000]()[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#000000]{[/COLOR] [COLOR=#c0c0c0]     [/COLOR][COLOR=#c0c0c0] [/COLOR]terminate[COLOR=#000000]();[/COLOR][COLOR=#c0c0c0]    [/COLOR][COLOR=#000000]}[/COLOR]    [COLOR=#000000]};
[/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]Stopper[/COLOR][COLOR=#000000]::[/COLOR][COLOR=#000000][I]run[/I][/COLOR][COLOR=#000000]()[/COLOR] [COLOR=#000000]{[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#800000]callback_funk[/COLOR][COLOR=#800000][COLOR=#000000]();[/COLOR][/COLOR]//здесь функцию запускаем [COLOR=#000000]}[/COLOR]  [COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]Stopper[/COLOR][COLOR=#000000]::[/COLOR]connectRequest[COLOR=#000000]([/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]*mycallback_f[/COLOR][COLOR=#000000])())[/COLOR] [COLOR=#000000]{[/COLOR] [COLOR=#c0c0c0]   [/COLOR][COLOR=#800000]callback_funk[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]mycallback_f[/COLOR][COLOR=#000000];//здесь мы копируем указатель на функцию[/COLOR] [COLOR=#000000]}
....
[/COLOR]
[COLOR=#000000]connectRequest[COLOR=#000000]([/COLOR][COLOR=#000000][/COLOR][COLOR=#000000][/COLOR][COLOR=#800000]SomeClassPtr[/COLOR][COLOR=#000000]->[/COLOR]SomeFunk[COLOR=#000000]([/COLOR][COLOR=#800000][/COLOR][COLOR=#000000]));//[/COLOR][/COLOR][COLOR=#000000][COLOR=#000000]вот здесь активно ругается компилятор[/COLOR]
....
[/COLOR]
В результате путём различных ухищрений я упёрся в ошибку:
"error C2664: Stopper::connectRequest: невозможно преобразовать параметр 1 из 'void' в 'void (__cdecl *)(void)' Выражение, имеющее тип void, нельзя преобразовать в другой тип"
Насколько я понял изучая эту тему, мне нужно корректно реализовать делегат, но у меня никак не получается это сделать...
Прошу помощи.
Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru