2

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

4

2 回答 2

6

由于这个 C++ 是最令人头疼的解析,你可以这样做:

Foo x((Bar()));

或者

Foo x = Bar();

您在问题中提供的非常 parashift 链接中查看了详细信息。但请注意,如果创建了复制构造函数
,第二个示例将中断。Fooexplicit

于 2013-08-23T01:30:17.247 回答
0

看起来你有一个const一致性问题。的构造函数Foo想要一个const Bar不是Bar()的。尝试:

const Bar b = Bar();
Foo x = Foo(b);
于 2013-08-23T01:24:20.450 回答