【问题标题】:My constructor specifies at least one value for construction, and yet it can be default constructed我的构造函数指定了至少一个构造值,但它可以是默认构造的
【发布时间】:2013-03-23 07:30:18
【问题描述】:

参加以下课程:

class Foo{
public:
    Foo(std::string bar_, int baz_ = 7)
    :bar(bar_)
    ,baz(baz_)
    {}

private:
    std::string bar;
    int baz;
};

由于 Foo(std::string bar_, int baz_ = 7); 是我唯一的构造函数,编译器不应该为我实现默认构造函数,对吧?我认为我可以构造这个类的唯一两种方法是:

Foo foo("foo");  
//or  
Foo foo("foo",0);  
//plus copy constructor and overloaded assignment operator.

但是,为什么会这样呢?

int main(){

    Foo foo();
}

当唯一的公共构造函数需要其第一个参数的值时,我不明白如何默认构造一个类。将默认构造函数设为私有或尝试 C++11 删除它,没有区别。这是怎么回事?
http://ideone.com/CL7IZo

【问题讨论】:

  • symbol foo in main 是一个函数,而不是 Foo 类型的实例。
  • 尝试在没有括号的情况下实例化你的对象(我什至怎么用英文写),然后阅读en.wikipedia.org/wiki/Most_vexing_parse :)
  • 为什么在过去 10 小时内出现了 3 次确切的语法问题?
  • 别担心。我们大多数人都经历过这种讨厌的启蒙。
  • @Koushik ohhhhhh... 语法之子!

标签: c++ class constructor default-value default-constructor


【解决方案1】:

因为Foo foo(); 是一个函数的前向声明,它返回一个Foo 并且不接受任何参数。改用Foo foo;,你会得到你的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多