TPath
- это вложенный класс, определенный внутри UpdateUtils
, вы должны определить его и использовать ключевое слово typename
.Например,
template <typename T>
typename UpdateUtils<T>::TPath *UpdateUtils<T>::getIdealPath(QList<TPath *> &paths)
^^^^^^^^^^^^^^^^^^^^^^^^^
Или применить конечный тип возврата , как предложено @PiotrSkotnicki:
template <typename T>
auto UpdateUtils<T>::getIdealPath(QList<TPath *> &paths) -> TPath *
^^^^ ^^^^^^^^^^
Обратите внимание, что для определения функции-члена вне определения класса имена используются в параметре-list и trailing-return-type будут найдены в области видимости класса, поэтому вам не нужно их квалифицировать (хотя их можно и квалифицировать).Это не относится к типу возврата. [basic.scope.class] / 4
Потенциальная область объявления, которая распространяется до или после конца определения класса, также распространяется на области, определенные его членомопределения, даже если члены определены лексически вне класса (это включает определения статических членов данных, определения вложенных классов и определения функций-членов, включая тело функции-члена и любую часть части объявлений таких определений, которая следует за идентификатором объявлениявключая параметр-объявление-предложение и любые аргументы по умолчанию).