gpt4 book ai didi

C++ 模板 t 不是有效的模板类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:11 26 4
gpt4 key购买 nike

我的 .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,有效。你能给点建议吗?

最佳答案

TPath 是在 UpdateUtils 中定义的嵌套类,您应该对其进行限定并使用 typename 关键字。例如

template <typename T>
typename UpdateUtils<T>::TPath *UpdateUtils<T>::getIdealPath(QList<TPath *> &paths)
^^^^^^^^^^^^^^^^^^^^^^^^^

或申请trailing return type正如@PiotrSkotnicki 建议的那样:

template <typename T>
auto UpdateUtils<T>::getIdealPath(QList<TPath *> &paths) -> TPath *
^^^^ ^^^^^^^^^^

请注意,对于类定义之外的成员函数定义,parameter-list 和 trailing-return-type 中使用的名称将在类作用域中查找,因此您不需要限定它们(限定它们就可以了尽管)。这不适用于返回类型。 [basic.scope.class]/4

The potential scope of a declaration that extends to or past the end of a class definition also extends to the regions defined by its member definitions, even if the members are defined lexically outside the class (this includes static data member definitions, nested class definitions, and member function definitions, including the member function body and any portion of the declarator part of such definitions which follows the declarator-id, including a parameter-declaration-clause and any default arguments).

关于C++ 模板 t 不是有效的模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52890813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com