关于C ++ FAQ的一个问题讨论了在函数中声明局部对象的正确方法:http://www.parashift.com/c++-faq/fn-decl-vs-obj-instantiation.html
以FAQ为例:
class Bar {
public:
Bar();
};
class Foo {
public:
Foo(Bar const& b);
void blah();
};
void yourCode()
{
Foo x(Bar()); // error
}
在VS2012中,错误为Foo x(Bar (__cdecl *)(void))': prototyped function not called (was a variable definition intended?)
有人可以解释一下为什么这个声明会出错吗?(C ++ FAQ解释太模糊了)。
Foo
和Bar
都在yourCode()
的正文中可见,而Foo x(Bar());
是我声明类型为Foo
的对象的方式。
答案 0 :(得分:6)
由于这个C ++是最令人烦恼的解析,你可以这样做:
Foo x((Bar()));
或
Foo x = Bar();
详细信息将在您在问题中提供的非常快速的链接中进行审核
但请注意,如果Foo
复制构造函数为explicit
,则第二个示例将中断。
答案 1 :(得分:0)
看起来您遇到了const
一致性问题。 Foo
的构造函数需要const
Bar
而Bar()
不是const Bar b = Bar();
Foo x = Foo(b);
。尝试:
{{1}}