1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
|
|||||||||||
1 | |||||||||||
Конвертирование типов или указатель на функцию15.06.2013, 22:14. Показов 3119. Ответов 13
Метки нет (Все метки)
Создаю класс mainwindow, в нём есть функции dispatcher_handler и interception. В interception есть библиотечная функция pcap_loop (Библиотека winpcap). Компилятор выдаёт ошибку:
G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\mainwindow.cpp:231: ошибка: cannot convert 'MainWindow::dispatcher_handler' from type 'void (MainWindow:(unsigned char*, const pcap_pkthdr*, const unsigned char*)' to type 'pcap_handler {aka void (*)(unsigned char*, const pcap_pkthdr*, const unsigned char*)}' Код .h
0
|
15.06.2013, 22:14 | |
Ответы с готовыми решениями:
13
конвертирование или приведение типов Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) Конвертирование типов Указатель на функцию или делегат |
Комп_Оратор)
|
||||||||||||||||
16.06.2013, 03:01 | 2 | |||||||||||||||
StalkerSmerch, я совсем не знаю Qt.
Подозреваю, что хотя dispatcher_handler конечно видно в interception(QString nameAdapter) как методе класса (думаю нестатическом, - догадка)), для pcap_loop - библиотечной функции (тоже догадка) может быть не достаточно данных для получения адреса метода, для данного экземпляра MainWindow. А что если попробовать создать поле - указатель:
2
|
16.06.2013, 11:24 | 3 |
По хорошему тема не относится к Qt, а все из-за незнания StalkerSmerch, IGPIGP С++.
В C++ для вызова метода через указатель, в Си++ требуется указатель на объект и указатель на метод. Используй для каллбека статический метод, или функцию обертку.
2
|
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
|
||||||
16.06.2013, 12:31 [ТС] | 4 | |||||
Dmitriy_M,
Это ведь так?
0
|
16.06.2013, 18:24 | 5 |
В стандартном С++ не так. Если не ошибаюсь в компиляторе от Borland был особый тип указателя на метод, который содержал информацию об объекте.
Да. Статические методы класса существуют до создания любого экземпляра этого класса, и существуют когда нет ни одного экземпляра этого класса. Если правильно понял документацию, то четвертый параметр pcap_loop указатель на пользовательские данные, а это значит, что можно создать структуру содержащая указатель на объект, которому нужно передавать данные при вызове обработчика.
1
|
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
|
|||||||||||
16.06.2013, 23:42 [ТС] | 6 | ||||||||||
Dmitriy_M,
Ошибка: G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\mainwindow.cpp:144: ошибка: cannot declare member function 'static void MainWindow::dispatcher_handler(unsigned char*, const pcap_pkthdr*, const unsigned char*)' to have static linkage [-fpermissive] Объявляю в .h:
Добавлено через 1 час 44 минуты Всё, разобрался. Но появился новый вопрос. А как указывать на создаваемый объект класс(this не работает) в dispatcher_handler? Можно создавать только новый объект.
0
|
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
|
||||||
17.06.2013, 01:06 [ТС] | 8 | |||||
Dmitriy_M,
Так? Или надо обязательно структуру создавать?
G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\mainwindow.cpp:251: ошибка: cannot convert 'MainWindow*' to 'u_char* {aka unsigned char*}' for argument '4' to 'int pcap_dispatch(pcap_t*, int, pcap_handler, u_char*)'
0
|
17.06.2013, 14:00 | 9 | |||||
От тебя зависит, т.к. вот это твой код
1
|
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
|
||||||
23.06.2013, 01:53 [ТС] | 10 | |||||
@Dmitriy_M,
Не получается так. Видимо я что-то не понимаю
G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\monitoring.cpp:110: ошибка: cast from 'monitoring*' to 'unsigned char' loses precision [-fpermissive] G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\monitoring.cpp:110: ошибка: invalid conversion from 'void (*)(monitoring*, const pcap_pkthdr*, const unsigned char*)' to 'pcap_handler {aka void (*)(unsigned char*, const pcap_pkthdr*, const unsigned char*)}' [-fpermissive] G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\monitoring.cpp:110: ошибка: invalid conversion from 'unsigned char' to 'u_char* {aka unsigned char*}' [-fpermissive] Добавлено через 27 минут Или можно ли как нибудь по другому вызвать метода этого класса? Т.е. сделать вот так: emit outputStatBPS(buf);
0
|
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
|
|||||||||||
25.06.2013, 21:19 [ТС] | 12 | ||||||||||
@Dmitriy_M, попробовал.
Пишет: G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\monitoring.cpp:13: ошибка: invalid cast from type 'unsigned char*' to type 'monitoring::bufInf' G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\monitoring.cpp:14: ошибка: invalid cast from type 'timeval' to type 'timeval*' G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\monitoring.cpp:114: ошибка: invalid cast from type 'monitoring::bufInf' to type 'timeval' Хотя, написано что reinterpret_cast вообще пофиг на принимаемый тип данных. Что делать? Может где указатель нужен или ещё что-то? Код в monitoring.h:
0
|
Заблокирован
|
|||||||||||
25.06.2013, 22:27 | 13 | ||||||||||
0
|
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
|
|
26.06.2013, 14:41 [ТС] | 14 |
@rrrFer, вы правильно поняли. Но выдаёт это:
G:\Qt\Qt5.0.2\Tools\QtCreator\bin\probMon\monitoring.cpp:117: ошибка: cannot convert 'monitoring::interception(pcap_t*)::<lambda(unsigned char*, const pcap_pkthdr*, const unsigned char*)>' to 'pcap_handler {aka void (*)(unsigned char*, const pcap_pkthdr*, const unsigned char*)}' for argument '3' to 'int pcap_dispatch(pcap_t*, int, pcap_handler, u_char*)'
0
|
26.06.2013, 14:41 | |
26.06.2013, 14:41 | |
Помогаю со студенческими работами здесь
14
Конвертирование типов данных Конвертирование типов данных Конвертирование в bool собственных типов Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
|
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке
В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
|
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
|
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins
В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
|
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang
Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
|
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
|
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
|
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
|
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
|
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента!
4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве).
Первое вводное занятие. . .
|
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
|
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений
Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
|