我正在尝试从类方法中更改成员变量:
班级声明是:
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();
}
}
}
有什么想法吗?
答案 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)
一个可能的缺陷:在第一行初始化变量。当你按原样写它时,它将被赋予不确定的值。可以是真或假。
你确定你已经调用了上面的构造函数吗?