C ++指针超出范围

时间:2013-01-06 20:16:19

标签: c++ pointers

我试着寻找答案,但我找不到答案。我是C ++的新手,所以指针对我来说还不直观。

我有一个程序,它有一个main和其他单独的功能,当点击GUI上的按钮时运行这些功能。

编译时,我从clickbutton函数中得到一个错误,指出指针未声明。我知道这是一个范围问题,但我不知道如何解决这个问题。我知道这是一个非常简单的答案,但我似乎无法在网上找到它。请告诉我访问它的正确方法。

int main () {
...
Contract contract;
contract.firstvalue = 1 // various variables that need to be set for this class
contract.secondvalue = 2 // various variables that need to be set for this class

Contract *pointer = &contract; //pointer
...
}

点击按钮

void clickbutton(){
//clicking a button should change the contract values
pointer.firstvalue = 5;
}

void clickbutton2(){
//clicking a button should change the contract values
pointer.secondvalue = 10;
}

编辑:好吧,我看到我做错了什么。我很担心在main之外声明,因为我无法设置'firstvalue'和'secondvalue'。但是我可以在main中设置它们并在main之外声明变量。在这种情况下我不需要指针。感谢和抱歉造成混乱的可怕代码。

3 个答案:

答案 0 :(得分:2)

当且仅当按钮的代码在同一范围内时,才声明那些变量在main()之外。否则,将它们声明为静态,但要看看它的作用。

答案 1 :(得分:2)

更新:好的。既然您已修复了原始错误,那么clickbutton()产生错误的原因是因为pointer变量不在范围

您将需要以下内容:

void clickbutton(Contract *pointer){
  //clicking a button should change the contract values
  pointer->firstvalue = 5;
}

或者,如果您的合同是全局对象(始终存在),

Contract *pointer;
void clickbutton() {
  pointer->firstvalue = 5;
}
int main() {
  Contract c;
  pointer = &c;
  clickbutton();
}

但这可能不是你想要的。

答案 2 :(得分:1)

您应该修改您的函数,以便它们将您想要用作指针作为参数。听起来你正在寻找一个全局变量,如果可能的话应该避免。传递你的物体(如下图所示)是一个更好的主意。请注意使用箭头->运算符而不是点.运算符,因为我们正在处理指针。

void clickbutton(Contract *pointer) {
    //clicking a button should change the contract values
    pointer->firstvalue = 5;
}

void clickbutton2(Contract *pointer) {
    //clicking a button should change the contract values
    pointer->secondvalue = 10;
}