我有一个像这样的函子

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.6clang-3.1。两者都给出相同的错误。

最佳答案

可以将其读取为PairsCount是一个不带任何参数并返回PrintParentheses的函数。由于所谓的“最烦人的解析”,因此必须将其视为函数声明。而是创建一个对象并使用它:

PrintParentheses obj(pairsCount);
obj();

07-27 13:42