
Arrow1 мая 2017 г. 1:00
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 функция.

Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ua
- Unknown akadamn
- 24 января 2025 г. 17:14
Qt - Тест 001. Сигналы и слоты
- Результат:84баллов,
- Очки рейтинга4
Ua
- Unknown akadamn
- 24 января 2025 г. 16:22
Qt - Тест 001. Сигналы и слоты
- Результат:42баллов,
- Очки рейтинга-8
Последние комментарии
ИМ
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 ноября 2024 г. 21:51

Evgenii Legotckoi31 октября 2024 г. 23:37
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5 октября 2024 г. 16:51
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
f
Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
firstlunoxod15 февраля 2025 г. 13:46

Дмитрий3 февраля 2025 г. 16:24
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Думаю, что здесь всё правильно сделано кроме одного единственного момента.
Функция, которая передаётся в качестве 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Понял, спасибо!
Вылетало потому, что было так:
А нужно так:
Туплю.