朋友功能未声明的标识符

时间:2013-08-25 03:08:18

标签: c++ qt opencv friend friend-function

我正在使用OpenCV和Qt 5.我需要将鼠标回调传递给一个名为窗口的我正在做的一些工作。但是,我无法看到我班级的任何私有成员变量。

以下是一些代码:

class testWizard : public QWizard
{
  Q_OBJECT


  public:
   testWizard();
  ~testWizard();

   friend void mouseHandler(int, int, int, void*);



   private:

    cv::Mat preview;

    bool drag; 
    cv::Rect rect;   
};

朋友的功能:

void mouseHandler(int event, int x, int y, void* param)
{

 cv::Point p1, p2;

 if(event == CV_EVENT_LBUTTONDOWN && !drag)
 {
   p1 = cv::Point(x,y);
   drag = true;
 }

 if(event == CV_EVENT_LBUTTONDOWN && drag)
 {
   cv::Mat temp;
   preview.copyTo(temp);
 }

}

我不知道我做错了什么。我很确定这是宣布这个的正确方法。它告诉我预览和拖动是未声明的标识符。不幸的是我需要这样做,因为我需要访问私有成员并且由于隐藏了这个参数而无法将指针传递给成员函数。

有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:4)

使用friend声明,您的函数可以访问testWizard对象的成员。但是,您仍需要提供一个对象或指向此类对象的指针来访问变量:

testWizard* wizard = getTestWizard(); // no idea how to do that
if(event == CV_EVENT_LBUTTONDOWN && !wizard->drag) { ... }