如何从静态方法更改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.
最简单的解决方案是创建成员static
。 static
成员无需对象即可访问,因为 static
成员为所有实例共享。
tried to make attribute static, but I got error: undefined reference to `Wrapper::attribute
这意味着你忘记定义变量了。
method
是一个 class 方法,attribute
是一个实例变量。在您当前的设计中调用 method
时没有实例,因此没有 attribute
。更改实例变量(如 attribute
)的唯一方法是提供 Wrapper
到 method
的实例。有几种可能的解决方案。一些想法:
- 一个实例作为
method
的参数(参见 Estiny 的回答)
Wrapper
的全局实例(不建议)
- make
Wrapper
a singleton(通常不建议,但在某些情况下单例可能是一种解决方案)
如何在 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.
最简单的解决方案是创建成员static
。 static
成员无需对象即可访问,因为 static
成员为所有实例共享。
tried to make attribute static, but I got error: undefined reference to `Wrapper::attribute
这意味着你忘记定义变量了。
method
是一个 class 方法,attribute
是一个实例变量。在您当前的设计中调用 method
时没有实例,因此没有 attribute
。更改实例变量(如 attribute
)的唯一方法是提供 Wrapper
到 method
的实例。有几种可能的解决方案。一些想法:
- 一个实例作为
method
的参数(参见 Estiny 的回答) Wrapper
的全局实例(不建议)- make
Wrapper
a singleton(通常不建议,但在某些情况下单例可能是一种解决方案)