Шаблон C ++ t не является допустимым типом шаблона - PullRequest
0 голосов
/ 19 октября 2018

Мой файл .h:

template <typename T>
class UpdateUtils
{
public:
typedef struct {
    QList<T> file;
} TPath;

static TPath *getIdealPath(QList<TPath *> &paths);
};

Мой файл .cpp:

template <typename T>
TPath *UpdateUtils<T>::getIdealPath(QList<TPath *> &paths) {
   return 0;
}

Это приводит к ошибкам в файле cpp:

error: C2143: syntax error : missing ';' before '*'
error: C2065: 'T' : undeclared identifier
error: C2923: 'UpdateUtils' : 'T' is not a valid template type argument for parameter 'T'

Если я заменю TPath * тип возвращаемого значения, например, int, это работает.Подскажите пожалуйста?

1 Ответ

0 голосов
/ 19 октября 2018

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

Потенциальная область объявления, которая распространяется до или после конца определения класса, также распространяется на области, определенные его членомопределения, даже если члены определены лексически вне класса (это включает определения статических членов данных, определения вложенных классов и определения функций-членов, включая тело функции-члена и любую часть части объявлений таких определений, которая следует за идентификатором объявлениявключая параметр-объявление-предложение и любые аргументы по умолчанию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...