Arrow30. April 2017 15: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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.Magst du es? In sozialen Netzwerken teilen!
Kommentare
sf
- sdfsdfkp fgskpgokspdog
- 14. Oktober 2024 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Ergebnis:90punkte,
- Bewertungspunkte8
МВ
- Максим Васильев
- 2. Oktober 2024 04:14
Qt - Тест 001. Сигналы и слоты
- Ergebnis:68punkte,
- Bewertungspunkte-1
ЛС
- Лев Семенов
- 30. September 2024 11:04
C++ - Тест 001. Первая программа и типы данных
- Ergebnis:53punkte,
- Bewertungspunkte-4
Letzte Kommentare
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5. Oktober 2024 07:51
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5. Februar 2024 01:50
Jetzt im Forum diskutieren
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3. Oktober 2024 04:05
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
Кирилл Гусарев27. September 2024 09:09
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
Думаю, что здесь всё правильно сделано кроме одного единственного момента.
Функция, которая передаётся в качестве 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Понял, спасибо!
Вылетало потому, что было так:
А нужно так:
Туплю.