如何使类成员函数编辑全局变量的值
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();
我在这里很困惑,我正在尝试制作一个类的函数来更改全局区域中的变量。
如果我像上面那样写代码,会正确吗?
如果不是,请有人教我怎么做,或者有更好的方法吗?
我的目标是创建一个名为cls1
、cls1.varA = var1
的cls
实例,即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 使类原子的复杂成员函数?