如何从静态方法更改C ++中对象的属性

How to change attribute of object in C++ from static method

如何在 C++ 中通过静态方法更改对象属性?我的方法必须是静态的。

代码:

class Wrapper
{
    private:
        double attribute; //attribute which I want to change
    public:
        Wrapper();
        ~Wrapper();
        static void method(double x);
}

我试过了:

std::string Wrapper::method(double x)
{
    attribute = x;
}

但是:

error: invalid use of member ‘Wrapper::attribute’ in static member function

也许这样:

std::string Wrapper::method(double x, Wrapper& obj)
{
    obj.attribute = x;
}

但是如果你有这样的问题,你应该重新考虑你的设计。引用 class 实例的方法没有理由是静态的。

静态方法不与 class 的任何实例相关联,而是与 class 本身相关联。编译器不知道这个 class 只有一个实例。您的问题有多种可能的解决方案,但正确的解决方案取决于您希望在更大范围内实现的目标。

静态成员函数无法访问非静态成员,因为没有您要引用其成员的对象。当然,您可以按照建议将对对象的引用作为参数传递,但这很愚蠢,因为您也可以将函数设为非静态成员。

It is a kind of object which is and will be created only once.

最简单的解决方案是创建成员staticstatic 成员无需对象即可访问,因为 static 成员为所有实例共享。

tried to make attribute static, but I got error: undefined reference to `Wrapper::attribute

这意味着你忘记定义变量了。

method 是一个 class 方法,attribute 是一个实例变量。在您当前的设计中调用 method 时没有实例,因此没有 attribute。更改实例变量(如 attribute)的唯一方法是提供 Wrappermethod 的实例。有几种可能的解决方案。一些想法:

  • 一个实例作为 method 的参数(参见 Estiny 的回答)
  • Wrapper 的全局实例(不建议)
  • make Wrapper a singleton(通常不建议,但在某些情况下单例可能是一种解决方案)