Вложенные классы Qt С++/решить незаконный вызов нестатической функции-члена

Я имею дело с образцом кода из SDK камеры, и у меня возникают проблемы с получением данных кадра «вне» класса CSampleCaptureEventHandler.

class DahengCamera : public QObject
{
    Q_OBJECT

    class CSampleCaptureEventHandler : public ICaptureEventHandler
    {       
        void DoOnImageCaptured(CImageDataPointer& objImageDataPointer, void* pUserParam)
        {
            [grab some data ...]
        
            CopyToImage(objImageDataPointer);  // illegal call of non-static member function
        }

    };


public:
    DahengCamera();
    ~DahengCamera();
    
private:
   
    void CopyToImage(CImageDataPointer pInBuffer);  // I want to have my frame datas here

    QImage m_data; //and here

};

Я использую вызов регистра обратного вызова, чтобы вызвать событие камеры «DoOnImageCaptured», когда система захватывает кадр. Но я застрял, получая данные вне этого метода. CopyToImage() должен получить ссылку на QImage или записать в m_data, но у меня есть ошибки «незаконный вызов нестатической функции-члена». Пытался сделать CopyToImage() статическим, но это просто переместило проблему...

Как я могу это решить?

Спасибо !

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

CopyToImage — приватная нестатическая функция в классе DahengCamera.
Тот факт, что CSampleCaptureEventHandler является вложенным классом внутри DahengCamera, позволяет ему получить доступ к закрытым членам и функциям DahengCamera (как если бы он был объявлен дружественным классом), но это не дает CSampleCaptureEventHandler указателей на какие-либо DahengCamera объекты.

Вам необходимо предоставить фактический экземпляр объекта CSampleCaptureEventHandler, для которого вызывается DoOnImageCaptured, с указателем/ссылкой на объект DahengCamera, для которого следует вызывать CopyToImage. Вы можете рассмотреть возможность предоставления этого указателя/ссылки на объект DoOnImageCaptured конструктору CSampleCaptureEventHandler (т. е. внедрение зависимостей).

(И — ради вашего же блага — попробуйте нет «исправить» это, превратив CopyToImage или m_data в статические — это создаст только ужасный беспорядок)

Итак, что-то вроде этого? класс CSampleCaptureEventHandler: public ICaptureEventHandler { CSampleCaptureEventHandler (DahengCamera *parent) { myParent = parent; } DahengCamera *myParent; [...] и в конструкторе DahengCamera: m_pSampleCaptureEventHandle = new CSampleCaptureEventHandler(this); Но я не понимаю, как интегрировать эту ссылку в CopyToImage?

Yoruk 17.05.2022 14:08

Да, тогда вы сможете вызвать myParent->CopyToImage(objImageDataPointer) в CSampleCaptureEventHandler::DoOnImageCaptured()

CharonX 17.05.2022 14:16

Другие вопросы по теме