2

我有一个这样的函子,

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

4

1 回答 1

8

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

PrintParentheses obj(pairsCount);
obj();
于 2012-10-08T05:57:09.433 回答