我试图通过类内函数返回指向main的指针来更改静态类成员变量的值-脚本无法正常工作,并且我尝试了一些其他操作,因此我决定寻求帮助。有什么想法或更有效的方式来做我想做的事吗?
#include <iostream>
using namespace std;
class container
{
public:
int accstatint()
{
int *ptr=&container::statint;
return *ptr;
}
private:
static int statint;
};
int container::statint=0;
int addone(int *n)
{
return *n++;
}
int main()
{
container obj;
int *ptr=obj.accstatint();
addone(*ptr);
cout<<*ptr;
}
答案 0 :(得分:3)
int accstatint()
{
int *ptr=&container::statint;
return *ptr;
}
这将返回int
的副本,这意味着您无法对其进行修改。您需要返回对int
的引用(或指针):
int& getStatInt() const { return container::statint; }
如果您确实要使用指针,可以使用它(但是没有优势,您应该更喜欢使用引用):
int* getStatIntP() { return &container::statint; }
现在您可以更新整数:
int main()
{
container c;
std::cout << c.getStatInt() << "\n"; // 0
auto& ref = c.getStatInt();
ref += 2;
std::cout << c.getStatInt() << "\n"; //2
}
但是所有这些都引出了一个问题:为什么您需要一个类的对象来对此进行修改?为什么不只是public
?我的意思是任何人都可以通过您的类进行修改,所以为什么不直接允许直接访问int
进行修改。如果这样做,那么它的目的是什么?您可能想要在类中使用static int
来跟踪构造了多少个该类的实例,但是您不允许外部访问它。在不知道自己要做什么的情况下,我无法为您提供帮助,您需要考虑一下自己的班级和班级。
答案 1 :(得分:1)
一个简单的包装器功能可以工作:
int& acc_staticint() { return staticint; }
您可以创建一个getter和setter方法,或者,由于您无论如何都有效地创建了变量public
,因此您可以这样做,然后引用container::staticint
。