C ++在类方法中改变类变量

时间:2015-02-04 16:35:34

标签: c++

班级定义:

    class videoPlay {
public:
    VideoCapture video;
    int cannyThreshold;
    int houghThreshold;
    int clickX;
    int clickY;
    int sB;
    int clickRadius;
    bool playVideo;
    bool edgeDetection;
    Mat selectedBall;
    Mat frame;
    Mat origFrame;
    vector<Vec3f> houghCircles;

    videoPlay( VideoCapture video ) : video(video) {}
    void nextFrame();
    void houghTransform();
    void detectEdges();
    void drawFrame();
    void mouseActionListener(int event, int x, int y, int flags, void* userdata);
    void selectBall();
    void addLabel(int num);
};

两种方法

void videoPlay::selectBall( ) {
    frame = origFrame.clone();
    for(int i = 0; i < houghCircles.size(); i++) {
        int x = houghCircles[i][0];
        int y = houghCircles[i][1];
        int radius = cvRound(houghCircles[i][2]);

        float circleEq = pow(clickX - x, 2) + pow(clickY - y, 2);
        Point center(cvRound(x), cvRound(y));

        if(circleEq <= pow(radius, 2)) {
            circle(frame, center, radius, Scalar(255, 0, 255), 4, 8, 0);
            sB = i;
            cout << sB << " - " << i << endl;
        } else {
            circle(frame, center, radius, Scalar(0, 0, 255), 2, 8, 0);
        }
    }
}

void videoPlay::addLabel(int num) {
    cout << sB << endl;
    int x = (int)houghCircles[sB][0];
    int y = (int)houghCircles[sB][1];
    putText(frame, "1", Point(x, y), 1, 1, Scalar(255, 255, 0), 1, 8, 0);
}

我在videoplayobject.selectBall()回拨中致电mouseclick。然后它将sB设置为鼠标指针所在的球(如果有的话)。然后在调用waitkey switch statement方法后,在键盘上按{kbd> 1 并在addLabel内。它应该使用sB索引houghCirclesselectBall设置的数字,但它会回到sB实例化的原始值。由于某些原因,sB

中未正确设置selectBall() {p> sBselectBall方法中设置为2,但当addLabel使用sB索引到向量时,sB不会t == selectBall中设置的内容。我做的事情非常愚蠢吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我会检查两个回调是否使用videoPlay的相同实例。你可以这样做,例如像这样在两种方法中:

cout << "this = '" << this << "'" << endl;

(抱歉,我认为这会更好,但是我没有足够的代表来添加评论......)