在面向对象编程中,成员变量通常用作方法参数的默认值。但是,当尝试将成员变量设置为默认参数时,您可能会遇到“无效使用非静态数据成员”之类的错误。
问题描述
您的目标是使成员函数的参数可选,在未提供参数时使用成员变量作为默认值。但是,您的代码会生成错误消息“无效使用非静态数据成员”。您怀疑代码有问题,但不确定解决方案。
代码片段
以下是提供的代码来说明问题:
class Object { public: void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; }; void Object::MoveTo(double speed, Point position = initPos) { currPos = postion; }
解决方案
成员的默认参数表达式函数只能依赖于类或全局范围内的元素。此外,必须在方法的声明(头文件)中定义默认参数。
要解决此问题,请使用 MoveTo 方法的两种重载:一种具有单个参数,另一种具有两个参数。具有单个参数的方法调用具有两个参数的方法,并传递预期的默认值。
void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Implementation }
通过调用 MoveTo(double) 并随后调用 MoveTo(double, Point),此技术允许您遵循 DRY 原则(不要重复),仅实现 MoveTo 一次。
以上是为什么不能在 C 成员函数中使用成员变量作为默认参数?的详细内容。更多信息请关注PHP中文网其他相关文章!