【发布时间】:2012-07-26 11:09:22
【问题描述】:
可能重复:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?
Most vexing parse: why doesn't A a(()); work?
这个让我很生气。也许它太简单了。
struct Foo
{
Foo() {}
Foo(const Foo& f) {}
void work() {}
};
int main()
{
Foo f( Foo() );
f.work();
}
GCC 4.6 给了我:
error: request for member ‘work’ in ‘f’, which is of non-class type ‘Foo(Foo (*)())’
省略复制操作后,有效代码可能如下所示:
int main()
{
Foo f;
f.work();
}
但是为什么我不能打电话给work() ??
编辑:
是的,重复(见下文)。第一次搜索时没有找到原始帖子,因为这个症状的来源位于我没想到的地方。
【问题讨论】:
-
你为什么要写
Foo f( Foo() );,写Foo f;有什么问题,应该可以按预期工作。您的第一个版本创建了一个完全不同的类型,您可以在错误消息中看到。 -
当然有点学术。来自对构造函数的研究
标签: c++ most-vexing-parse