-1

我试图寻找答案,但我找不到答案。我是 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 之外声明变量。在这种情况下,我不需要指针。感谢和抱歉造成混乱的可怕代码。

4

3 回答 3

2

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

于 2013-01-06T20:20:27.013 回答
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();
}

但这可能不是你想要的。

于 2013-01-06T20:20:42.337 回答
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;
}
于 2013-01-06T20:25:42.493 回答