У меня есть такой функтор,
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
, Оба дают одинаковую ошибку.
Это читается как pairCount — это функция, не принимающая аргументов и возвращающая PrintParentheses. Из-за того, что известно как «Наибольший синтаксический анализ», это должно рассматриваться как объявление функции. Вместо этого создайте объект и используйте его:
PrintParentheses obj(pairsCount);
obj();
Других решений пока нет …