我想设计一个函数,以便参数是可选的,如果省略则默认构造。该参数是我在同一个头文件中定义的结构。试图使用以下函数声明:
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阻止了复制构造函数的生成。
答案 0 :(得分:2)
如果按值传递MarkerStyle
,它将被复制,您需要一个复制构造函数。
如果您不想要或不需要副本,请通过const引用传递,例如
void publish(MarkerStyle const& style=MarkerStyle());