从函数设置时,变量不会发生变化

时间:2014-12-15 18:30:49

标签: c++ oop

我正在尝试从类方法中更改成员变量:

班级声明是:

class BypassButton{

    public:
        BypassButton();
        BypassButton(double x, double y);

        //methods
        void setup();
        void update();
        void draw();
        double getX();
        double getY();
        void toggle();

        bool bypassed;
        double x, y, radius;

};

变量在h文件中设置如下:

bool bypassed;

然后在构造函数中设置如下:

BypassButton::BypassButton(double x, double y){
    this->x = x;
    this->y = y;
    bypassed = false;
}

然后,我创建了一个切换此变量的函数:

void BypassButton::toggle(){
   bypassed = !bypassed;
}

当我在更改它之前和之后检查函数内部变量的值时,似乎一切正常。

但是,当我检查函数外部的值时,它永远不会改变。我尝试使用this->,但它无法正常工作。

这是Pedal Board的所有部分,因此我有一个具有BypassButton实例的类Pedal。 然后,我在我的主类中创建了一个Pedal Boards向量,并调用toggle:

void ofApp::mouseReleased(int x, int y, int button){
    for(int i = 0; i < numPedals; i++){
        BypassButton bb = pedals.at(i).getBypassButton();
        if(x > (bb.x - bb.radius) && x < (bb.x + bb.radius) && y > (bb.y - bb.radius) && y < (bb.y + bb.radius)){
            bb.toggle();
        }
    }
}

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

BypassButton bb = pedals.at(i).getBypassButton();

这会创建存储在pedals中的按钮的副本。您正在修改副本,而不是原始副本。改为使用引用:

BypassButton & bb = pedals.at(i).getBypassButton();

确保getBypassButton()返回引用。

禁止复制类以防止这样的错误也是适当的。您可以通过删除复制构造函数和赋值运算符来执行此操作:

BypassButton(BypassButton const &) = delete;
void operator=(BypassButton) = delete;

答案 1 :(得分:-1)

一个可能的缺陷:在第一行初始化变量。当你按原样写它时,它将被赋予不确定的值。可以是真或假。

你确定你已经调用了上面的构造函数吗?