Kopiuj
LineProcessor lineProc();
Tutaj deklarujesz funkcję o nazwie lineProc
, która przyjmuje 0 parametrów i zwraca obiekt typu LineProcessor
.
To co chciałeś osiągnąć to:
Kopiuj
LineProcessor lineProc;
Ogólnie reguły parsowania w C++ mówią, że jeśli można coś traktować jako deklarację funkcji, to właśnie tak zostanie traktowane. To jest jeszcze bardziej porypane jeśli bierze się pod uwagę, że nazwa funkcji w pewnych sytuacjach jest opcjonalna, więc
Kopiuj
SomeClass x(LineProcessor())
może być traktowane jako funkcja o nazwie x
, która zwraca obiekt SomeClass
, a przyjmuje jako parametr funkcję (bez nazwy) która zwraca LineProcessor i przyjmuje 0 parametrów.
Po więcej szczegółów możesz googlować "the most vexing parse c++".