我想为其中一个成员函数提供一个可选参数。当没有提供参数时,它将使用成员变量。
但是,当我尝试编译它时,它显示
error: invalid use of non-static data member 'Object::initPos'
只是为了隔离问题,我尝试默认一个 int 类型并且它编译得很好。我想知道我的代码有什么问题以及如何使用成员函数作为默认值。
谢谢您的帮助!
对象.h
class Object
{
public:
...
void MoveTo(double speed, Point position);
protected:
Point initPos;
Point currPos;
};
对象.c
void Object::MoveTo(double speed, Point position = initPos)
{
currPos = postion;
}
点.h
class Point
{
...
private:
double x;
double y;
double z;
};
原文由 tuzzer 发布,翻译遵循 CC BY-SA 4.0 许可协议
成员函数的默认参数表达式只能依赖于类或全局范围内的事物。默认参数也必须在方法的声明中指定(即在头文件中)。
为了解决这个问题,您需要 2 个 MoveTo 方法的重载。一个需要 1 个参数,另一个需要 2 个参数。采用 1 个参数的方法调用另一个方法,传递您认为是默认值的值。
请注意,当您制作
MoveTo(double)
调用MoveTo(double, Point)
时,它允许您只编写一次MoveTo
的实现,从而尊重 DRY 原则。