Почему я получаю эту ошибку «повторно объявлено как символ другого типа»?

У меня есть такой функтор,

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, Оба дают одинаковую ошибку.

2

Решение

Это читается как pairCount — это функция, не принимающая аргументов и возвращающая PrintParentheses. Из-за того, что известно как «Наибольший синтаксический анализ», это должно рассматриваться как объявление функции. Вместо этого создайте объект и используйте его:

PrintParentheses obj(pairsCount);
obj();
8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]