在C+中声明本地对象+; < > C++中的一个问题讨论了在函数中声明局部对象的正确方法:
给出常见问题解答中的示例:在C+中声明本地对象+; < > C++中的一个问题讨论了在函数中声明局部对象的正确方法:,c++,C++,给出常见问题解答中的示例: class Bar { public: Bar(); }; class Foo { public: Foo(Bar const& b); void blah(); }; void yourCode() { Foo x(Bar()); // error } 在VS2012中,错误是foox(Bar(uu cdecl*)(void)):未调用原型函数(是否打算使用变量定义? 有人能解释一下为什么这个声明会出错吗?(C++常见问
class Bar {
public:
Bar();
};
class Foo {
public:
Foo(Bar const& b);
void blah();
};
void yourCode()
{
Foo x(Bar()); // error
}
在VS2012中,错误是foox(Bar(uu cdecl*)(void)):未调用原型函数(是否打算使用变量定义?
有人能解释一下为什么这个声明会出错吗?(C++常见问题解答的解释太模糊了)。
Foo
和Bar
都在yourCode()
和Foo x(Bar())的主体中可见
是我声明类型为Foo
的对象的一种方法。看起来您遇到了const
一致性问题。Foo
的构造函数需要一个const
Bar
,而Bar()
不是。尝试:
const Bar b = Bar();
Foo x = Foo(b);
由于此C++是最麻烦的解析,您可以执行以下操作:
Foo x((Bar()));
或
详细信息将在您在问题中提供的parashift链接中查看。但是请注意,如果将
Foo
复制构造函数设置为explicit
,则第二个示例将中断 谷歌“最烦人的解析”,你会得到答案。一些帮助:不提供这个答案,因为我相信这是一个骗局,因为它提到了所谓的“最烦人的解析”。。。修复方法是添加一组额外的括号foox((Bar())编码>或将条
实例提取为变量条;Foo x(bar)代码>@C.R.你能回答这个问题吗?我很乐意接受。@newprint:其他人有更详细的答案。您可以接受这些。@zneak,然后它接受一个未命名的条作为参数。最简单的修复方法是foox{Bar{}代码> IMO,但它是C++ 11OH CRAP,你说得对。@ ZNEAK,狡猾的C++是棘手的:P无论如何,我将离开它,因为它没有被提及。
Foo x = Bar();