为什么要使用“ typename”关键字进行以下定义?

雌激素
template <typename dataType>
**typename** List<dataType>::Node* List<dataType>::find(int index){
    Node *cur = head;
    for(int i = 0; i < index; i++){
        cur = cur->next;
    }
    return cur;
}

如果我不使用它,则会出现以下错误:

need ‘typename’ before ‘List<dataType>::Node’ because ‘List<dataType>’ is a dependent scope

因此,我阅读了Wiki条目,但没有得到该特定示例背后的原因。

特里斯坦·布林德尔

因为,如错误消息所示,它List<dataType>::Node是一个从属名称,即依赖于模板参数的名称。假设您有这样的事情:

struct A {
    typedef float t;
};

struct B {
    static int t;
};

template <typename T>
void func()
{
    T::t * x; // pointer declaration, or multiplication? It depends...
}

在这里,A::tB::t都是有效的C ++表达式,但含义完全不同:第一个是类型,第二个是值。现在,当编译器首次解析模板函数时func()-在进行任何类型替换之前检查其语法是否正确-它必须尝试确定T::t * x含义。显然,有两种可能的方法来解析它,因此编译器必须决定采用哪种方法。

在某些情况下,编译器有足够的“上下文”来确定您是否在引用类型,但是在许多情况下(例如本示例),编译器没有。当无法确定时,它假定您正在谈论一个值-因此上述内容(希望)为您提供了有关变量x未知的错误如果要T::t被视为类型,则需要使用typename关键字明确地告诉它

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要使用“ typename”关键字进行以下定义?

来自分类Dev

为什么要使用列表进行导航?

来自分类Dev

以下定义实际上在做什么?

来自分类Dev

Boost库中以下定义的含义是什么

来自分类Dev

为什么需要使用 await 关键字来调用异步方法

来自分类Dev

为什么jsonschema无法验证架构中的以下定义?

来自分类Dev

我为什么要使用mercurial而不进行合并?

来自分类Dev

为什么NULL需要使用块进行类型转换?

来自分类Dev

为什么要使用矩阵进行3D投影?

来自分类Dev

微软为什么要使用我的帐户进行RDP连接

来自分类Dev

人们为什么要使用globals()定义变量

来自分类Dev

流氓游戏为什么要使用这些定义对象?

来自分类Dev

为什么需要使用browserify`paths'定义?

来自分类Dev

为什么要使用自定义字体图标?

来自分类Dev

JS中以下定义方式之间有什么区别?

来自分类Dev

Angular 2-如果使用自定义验证,为什么需要使用ngForm?

来自分类Dev

如果可以在没有JOIN的多个表中进行选择,为什么还要使用JOIN?

来自分类Dev

为什么要使用ASP.Net Web Api代替SignalR进行内部项目

来自分类Dev

为什么要使用Imgur或Amazon S3之类的服务进行图像托管?

来自分类Dev

为什么要使用互斥锁而不是布尔变量进行线程同步?

来自分类Dev

为什么Slick需要使用三个等号(===)进行比较?

来自分类Dev

为什么我要使用静态方法进行数据库访问

来自分类Dev

YII-当可以在Save()函数之前进行编码时,为什么要使用beforeSave()

来自分类Dev

Rails数据库,为什么要使用相同的DBMS进行开发和生产?

来自分类Dev

了解我们为什么要使用反转控制容器进行单元测试

来自分类Dev

为什么我需要使用这种奇怪的类型进行枚举运算?

来自分类Dev

为什么要使用带有记忆的动态编程来解决-进行更改的最小硬币数量

来自分类Dev

为什么要使用骰子系数而不是IOU进行细分任务?

来自分类Dev

GitHub Actions-为什么要使用不同的Node版本进行构建?

Related 相关文章

  1. 1

    为什么要使用“ typename”关键字进行以下定义?

  2. 2

    为什么要使用列表进行导航?

  3. 3

    以下定义实际上在做什么?

  4. 4

    Boost库中以下定义的含义是什么

  5. 5

    为什么需要使用 await 关键字来调用异步方法

  6. 6

    为什么jsonschema无法验证架构中的以下定义?

  7. 7

    我为什么要使用mercurial而不进行合并?

  8. 8

    为什么NULL需要使用块进行类型转换?

  9. 9

    为什么要使用矩阵进行3D投影?

  10. 10

    微软为什么要使用我的帐户进行RDP连接

  11. 11

    人们为什么要使用globals()定义变量

  12. 12

    流氓游戏为什么要使用这些定义对象?

  13. 13

    为什么需要使用browserify`paths'定义?

  14. 14

    为什么要使用自定义字体图标?

  15. 15

    JS中以下定义方式之间有什么区别?

  16. 16

    Angular 2-如果使用自定义验证,为什么需要使用ngForm?

  17. 17

    如果可以在没有JOIN的多个表中进行选择,为什么还要使用JOIN?

  18. 18

    为什么要使用ASP.Net Web Api代替SignalR进行内部项目

  19. 19

    为什么要使用Imgur或Amazon S3之类的服务进行图像托管?

  20. 20

    为什么要使用互斥锁而不是布尔变量进行线程同步?

  21. 21

    为什么Slick需要使用三个等号(===)进行比较?

  22. 22

    为什么我要使用静态方法进行数据库访问

  23. 23

    YII-当可以在Save()函数之前进行编码时,为什么要使用beforeSave()

  24. 24

    Rails数据库,为什么要使用相同的DBMS进行开发和生产?

  25. 25

    了解我们为什么要使用反转控制容器进行单元测试

  26. 26

    为什么我需要使用这种奇怪的类型进行枚举运算?

  27. 27

    为什么要使用带有记忆的动态编程来解决-进行更改的最小硬币数量

  28. 28

    为什么要使用骰子系数而不是IOU进行细分任务?

  29. 29

    GitHub Actions-为什么要使用不同的Node版本进行构建?

热门标签

归档