如何使类成员函数编辑全局变量的值

Posted

技术标签:

【中文标题】如何使类成员函数编辑全局变量的值【英文标题】:How to make a class member function edit the value of global variable 【发布时间】:2020-09-16 08:45:27 【问题描述】:
int var1 = 0;
int var2 = 10;

class cls

    int varA;
    int *varB;

public:
    cls(int valueA, int *valueB)
        varA = valueA;
        *varB = *valueB;
    

    void putValueAtoVar2(void)
        *varB = varA;
    


void setup()
    cls cls1(var1, &var2);


void loop()
    cls1.putValueAtoVar2();

我在这里很困惑,我正在尝试制作一个类的函数来更改全局区域中的变量。

如果我像上面那样写代码,会正确吗?

如果不是,请有人教我怎么做,或者有更好的方法吗?

我的目标是创建一个名为cls1cls1.varA = var1cls 实例,即0,当运行函数putvalueAtoVar2 时,它应该更改全局变量var2,即@987654329 @ 为cls1.varA 的值,即0

【问题讨论】:

你没有初始化 varB 指向一个有效的(正确分配的)内存块。 我和@goodvibration 在一起你可能没有显示相关代码吗?请提供minimal reproducible example。 @ZhuSong 我改进了你的编辑,以后在编辑帖子时,请务必给它一个全局概览,虽然你的更改是准确的,但你留下了其他问题。 而不是*varB = *valueB; 我想你想要varB = valueB; @anastaciu 谢谢,下次会改进我的发帖方式。 【参考方案1】:

你可以用这个

全局变量之前是globalVar1=0,之后是globalVar2=10

将实例变量 cls.varA 赋值给 globalVar2,变为globalVar2=0

以下是以下代码:

#include <iostream>
using namespace std;

int globalVar1 = 0;
int globalVar2 = 10;

class cls

    int varA;
    int *varB;

public:
    cls(int gVar1,int* gVar2)
        varA = gVar1;
        varB = gVar2;
    

    void putValueAtoVar2(void)
        *varB = varA;
    
;


int main()

    //setup
    cls cls1(globalVar1, &globalVar2);
    cout<<"global variable "<<"1st : "<<globalVar1<<" 2nd : "<<globalVar2<<endl;
    //changing the value of global variable
    cls1.putValueAtoVar2();
    cout<<"After changing global variable "<<endl;
    cout<<"global variable "<<"1st : "<<globalVar1<<" 2nd : "<<globalVar2<<endl;
    return 0;

【讨论】:

啊所以我的大错误只是在类构造函数上,我不应该添加 * 符号?编辑:我写了 *varB = *valueB,而我应该写 varB=valueB? 是的,你只需要改变它

以上是关于如何使类成员函数编辑全局变量的值的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 std::atomic 使类原子的复杂成员函数?

C++中如何可以修改const函数内的成员变量的值?

C++中,类内的成员变量自动初始化为零吗,而全局变量随意赋值

mfc怎么设置全局变量

java中怎么样调用父类中的成员变量的值?谢谢!!!

面向对象:类的成员---只是特定(类的)命名空间的全局变量(函数)而已