为什么我会将此“重新声明为不同类型的符号”错误?

时间:2012-10-08 05:54:38

标签: c++ functor

我有这样的仿函数,

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。两者都给出了同样的错误。

1 个答案:

答案 0 :(得分:8)

它被读作 pairsCount是一个不带参数的函数并返回PrintParentheses 。由于所谓的最令人烦恼的解析,这必须被视为函数声明。相反,创建一个对象并使用它:

PrintParentheses obj(pairsCount);
obj();