默认构造可选的函数参数

时间:2015-10-22 19:49:07

标签: c++ optional-parameters c++03 default-constructor

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

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阻止了复制构造函数的生成。

1 个答案:

答案 0 :(得分:2)

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

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

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