gpt4 book ai didi

c++ - 如何在 C++ 中使用成员变量作为默认参数?

转载 作者:IT老高 更新时间:2023-10-28 12:42:54 24 4
gpt4 key购买 nike

我想为其中一个成员函数设置一个可选参数。当没有提供参数时,它会使用一个成员变量。

但是,当我尝试编译它时,它显示

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;
};

最佳答案

成员函数的默认参数表达式只能依赖于类或全局范围内的事物。默认参数也必须在方法的声明中指定(即在头文件中)。

要解决这个问题,您需要对 MoveTo 方法进行 2 次重载。一个需要 1 个参数,另一个需要 2 个参数。采用 1 个参数的方法调用另一个方法,并传递您认为是默认值的值。

void Object::MoveTo(double speed)
{
MoveTo(speed, initPos);
}

void Object::MoveTo(double speed, Point position)
{
// Everything is done here.
}

注意当你让MoveTo(double)调用MoveTo(double, Point)时,它允许你编写MoveTo的实现只有一次,因此尊重 DRY原则。

关于c++ - 如何在 C++ 中使用成员变量作为默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com