gpt4 book ai didi

c++ - 友元函数未声明的标识符

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:34 25 4
gpt4 key购买 nike

我正在使用 OpenCV 和 Qt 5。我需要将鼠标回调传递给命名窗口以完成我正在做的一些工作。但是,我无法让它看到我类的任何私有(private)成员变量。

这是一些代码:

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);
}

}

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

有人可以帮忙吗?谢谢!

最佳答案

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

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

关于c++ - 友元函数未声明的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18425274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com