可能重複:
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;'有什麼問題,這應該按預期工作。您的第一個版本會創建一個完全不同的類型,如您在錯誤消息中所看到的。 – Nobody 2012-07-26 11:12:17
它當然有點學術。來自研究什麼是構造函數被調用 – ritter 2012-07-26 11:13:05