我有这样的仿函数,
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
。两者都给出了同样的错误。
答案 0 :(得分:8)
它被读作 pairsCount是一个不带参数的函数并返回PrintParentheses 。由于所谓的最令人烦恼的解析,这必须被视为函数声明。相反,创建一个对象并使用它:
PrintParentheses obj(pairsCount);
obj();