struct构造函数错误,为什么使用默认构造函数会调用错误?

时间:2014-08-29 07:49:34

标签: c++ struct

#include <iostream>
using namespace std;

struct Foo{
    Foo(){}
    Foo(int){}
    void fun(){}
};

void main()
{
    Foo a(10);
    a.fun();
    Foo b();
    b.fun();//error
    Foo c = Foo(); // this is the right way to use default constructor?
    c.fun();
}

编译时代码有错误,因为b不是一种类,谁可以告诉我什么是b?以及Foo b()的含义?

2 个答案:

答案 0 :(得分:1)

此问题通常称为C ++ "most vexing parse"

Foo b();

这声明了一个名为b的函数,返回Foo

应该只是;

Foo b;

这将声明类型为b的变量Foo,它将默认初始化(Foo具有默认构造函数)。 Foo c = Foo();是的,这是另一种默认初始化(copy initialisation),但它通常更多地用于POD数据类型。

值得注意的是,使用C ++ 11(统一初始化),以下内容将编译并可能是您的替代方案

Foo b{};

但在这种情况下它做同样的事情(关于构建b)。

答案 1 :(得分:0)

正确的方法应该是:

Foo b;

您刚刚声明了一个名为b的函数。