Callback функции
Первый раз пытаюсь работать с Callback функциями. Помогите понять, что и где я не так делаю.
Вот код:
ReverseString.h
#ifndef REVERSESTRING_H #define REVERSESTRING_H #include <map> #include <string> using namespace std; class ReverseString { public: ReverseString(); ~ReverseString(); // Получить буквенный шифр и перекодировать в цифровой void decode(const string data); // Установка функции обратного вызова void setCallBackFunc(void (*func) (string data)); private: // Список численных значений для букв map<char, int> m_map; // Возвращаемая строка string m_string; // Указатель на функцию обратного вызова (возвращает цифровой шифр) void (*callbackfunction) (string data); }; #endif // REVERSESTRING_H
ReverseString.cpp
#include "reversestring.h" ReverseString::ReverseString() { // Перевод букв (шеснадцатеричные значения) в десятичные m_map = {{'A', 10 }, {'B', 11}, {'C', 12}, {'D', 13}, {'E', 14}, {'F', 15}}; } ReverseString::~ReverseString() { // Очистить данные m_map.clear(); m_string.clear(); } void ReverseString::decode(const string data) { // Получить буквенный шифр и перекодировать в цифровой m_string.clear(); // Прекодировка for (int i = 0; i < m_string.length(); ++i) { m_string += m_map.at(data.at(i)); } // Вызвать функцию обратного вызова для возврата // кодированной строки callbackfunction(m_string); } void ReverseString::setCallBackFunc(void (*func) (string data)) { // Установка функции обратного вызова callbackfunction = func; }
main.cpp
#include <QCoreApplication> #include <string> #include <iostream> using namespace std; #include "reversestring.h" void codeStringView(string data) { // Вывести кодированную строку // полученную от callback функции cout << data << endl; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); string data; cout << "Enter string:" << endl; cin >> data; ReverseString *codeString = new ReverseString(); // Установить функцию обратного вызова codeString->setCallBackFunc(codeStringView); codeString->decode(data); getchar(); return a.exec(); }
Код написал от фонаря :) только для понимания как работает Callback функция.
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- МА1 апреля 2025 г. 16:210ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
Думаю, что здесь всё правильно сделано кроме одного единственного момента.
Функция, которая передаётся в качестве CallBack функции должна быть статической. Не статические функции не получится передать в качестве обычных CallBack функций.
Программа запускается но результат не выводит. После ввода символа (А, В, С ... ) и нажатия Enter каретка переходит на новую строку и ничего не происходит. Нет ни ответа ни ошибки.
Она просто продолжает работать - реагирует на все нажатия клавиш.
А дело оказалось вовсе не CallBack. Ошибка в следующем коде:
Было
Стало
Ошибки следующие:
Спасибо!
Концентрировал внимание на CallBack и понадеялся, что все остальное написал правильно. :)
Теперь программа вылетает и пишет ошибку:
Запускается C:\Users\admin\Desktop\CallBackFunc\bild\Debug\debug\CallBackFunc.exe... Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly C:\Users\admin\Desktop\CallBackFunc\bild\Debug\debug\CallBackFunc.exe завершился с кодом -1073741819
По отладчику вылетает на строке:
С сообщением: Segmentation fault.
Ну как бы странно, что вылетает с Segmentation fault. Вот мой код.
main.cpp reversestring.h reversestring.cppПонял, спасибо!
Вылетало потому, что было так:
А нужно так:
Туплю.