#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()
的含义?
答案 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
的函数。