默认构造一个可选的函数参数

Default construct an optional function parameter

本文关键字:函数 参数 一个 默认      更新时间:2023-10-16

我想设计一个函数,使参数是可选的,如果省略则默认构造。参数是我在同一个头文件中定义的结构体。试图使用以下函数声明:

void publish(MarkerStyle style=MarkerStyle());

当我尝试编译时,我得到以下错误消息:

error: no matching function for call to ‘bob::MarkerStyle::MarkerStyle(bob::MarkerStyle)’
  void publish(MarkerStyle style=MarkerStyle());

是否有一些方法可以调用MarkerStyle的默认构造函数作为可选参数?

编辑:

这是我的头文件。

struct MarkerStyle()
{
    double alpha;
    std::auto_ptr<Color> color;
    MarkerStyle() :
    alpha(100) 
    {}
};
class Publisher
{
   void publish(MakerStyle style=MarkerStyle());
};

我理解Bo Perreson的回答。现在我的问题是,为什么我的代码不为MarkerStyle生成复制构造函数?

编辑:

我解决了这个问题。Auto_ptr阻止复制构造函数生成

如果你按值传递MarkerStyle,它将被复制,你需要一个复制构造函数。

如果您不想要或不需要副本,则通过const引用传递它,如

void publish(MarkerStyle const& style=MarkerStyle());