我正在處理來自相機 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() 靜態,但它只是移動了問題......
我該如何解決這個問題?
謝謝 !
uj5u.com熱心網友回復:
CopyToImage是類中的私有非靜態函式DahengCamera。內部嵌套類
的事實允許它訪問的私有成員和函式(就好像它被取消了朋友類一樣),但這不提供指向任何物件的指標。CSampleCaptureEventHandlerDahengCameraDahengCameraCSampleCaptureEventHandlerDahengCamera
您需要提供呼叫CSampleCaptureEventHandler物件的實際實體,并提供指向應該呼叫物件DoOnImageCaptured的指標/參考。您可能會考慮將此物件的指標/參考提供給 的建構式(即依賴注入)。DahengCameraCopyToImageDoOnImageCapturedCSampleCaptureEventHandler
(而且——為了你自己——不要試圖通過變成靜態來“解決”這個問題CopyToImage——m_data這只會造成可怕的混亂)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/476818.html
