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