【发布时间】:2012-10-08 05:54:37
【问题描述】:
我有一个这样的函子,
class PrintParentheses
{
public:
PrintParentheses(unsigned pairsCount)
{}
void operator ()() {}
};
在main()里面我是这样用的,
#include <iostream>
int main()
{
unsigned pairsCount = 0;
// Error: ‘PrintParentheses pairsCount()’ redeclared as different kind of symbol
PrintParentheses(pairsCount)();
PrintParentheses(5)(); // But this works
}
错误位置标记在代码本身内部。我已经测试了GCC-4.6 和clang-3.1。两者都给出相同的错误。
【问题讨论】:
-
PrintParentheses(pairsCount)();将pairsCount声明为返回PrintParentheses的函数。我知道这已经被问过好几次了,但我找不到它。 -
@hvd,没见过这么问的。语法与正常情况不同。我不得不说添加的括号一开始就给我留下了深刻的印象。
-
@chris 也许你是对的,导致混淆的更常见的语法是
T1 x(T2()),而不是T1(x)(),即使根本问题是相同的。 -
@hvd,如果我从 SO 中学到了一件事,那就是可以用多种不同的方式提出同一个问题。在尝试显式调用默认构造函数时,我经常看到
Class obj();。 -
我冒昧地简化了代码。通常,您应该尝试提供可以轻松重现问题的简短代码示例。你原来的很多代码都是无关紧要的。