如何用静态方法改变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;
}
但是如果你有这样的问题,你应该重新考虑你的设计。引用类实例的方法没有理由是静态的。
静态方法不与类的任何实例相关联,而是与类本身相关联。编译器不知道这个类只有一个实例。你的问题有很多可能的解决方案,但正确的解决方案取决于你想在更大的范围内实现什么。静态成员函数不能访问非静态成员,因为不存在要引用其成员的对象。当然,您可以像建议的那样将对象的引用作为参数传递,但这很愚蠢,因为您还不如将函数设置为非静态成员。
它是一种只被创建一次的对象。
最简单的解决方案是使成员static
。static
成员可以在没有对象的情况下访问,因为static
成员为所有实例共享。
试图使属性静态,但我得到错误:未定义的引用' Wrapper::attribute
method
为类方法,attribute
为实例变量。没有实例,因此在当前设计中调用method
时没有attribute
。更改实例变量(如attribute
)的唯一方法是将Wrapper
的实例提供给method
。有几种可能的解决方案。一些想法:
- 作为
method
参数的实例(参见Estiny的回答) -
Wrapper
的全局实例(不建议) - 使
Wrapper
为单例(通常不建议,但在某些情况下单例可以是一种解决方案)
相关文章:
- 类对象属性是否可以调用返回属性应具有的值的方法C++?
- 对象属性同级访问
- 迭代 Napi::对象属性(键)在 Node.js C++ N-API 中
- 是否可以在C++(17)中捕获某些对象属性的破坏性赋值事件
- 分配以下对象属性在哪里
- sutex作为对象属性和对象的向量
- C++ - 在类中包含不是类对象属性的变量是否是一种不好的做法
- 根据对象属性从列表中删除对象
- 将对象属性替换为列表
- 查找对象属性是否位于对象向量C++中
- 未知EABI对象属性44
- 按矢量中的对象属性合并排序
- 如何访问带有静态回调的对象属性
- c++中对象属性的内存分配
- 为什么对象属性的值在 c++ 中将其指针添加到映射后返回零
- 如何检查对象属性更新是否存在 std::map 键,否则插入一个新键?
- 从ASP.NET应用程序查询Active Directory对象属性将返回旧结果
- 性能对象属性与范围变量
- 无法访问对象属性
- 如何从对象方法中访问对象属性