zoukankan      html  css  js  c++  java
  • 使用Template时 typename 关键字的用法

    以下面这个简单的程序为例

    #include <iostream>
    
    template<class  CONTAINER>
    struct EST_TTI_Entry
    {
      float t;
      CONTAINER::Index i;
    };
    
    int main()
    {
        return 0;
    
    
    }

    使用 visual studio 2008 编译会提示 

    1>d:codecplusexerciseabouttemplatememberdefaultintmain.cc(7) : error C2146: syntax error : missing ';' before identifier 'i'
    1>d:codecplusexerciseabouttemplatememberdefaultintmain.cc(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

    经google ,发现原因是 

         because CONTAINER::Index is a dependent type.

    原帖地址:

    http://stackoverflow.com/questions/7169592/error-missing-type-specifier-int-assumed-c-does-not-support-default-int

    改为

    typename CONTAINER::Index i;

    即可编译通过 

    同样的程序如果用gcc 编译 , 会报

     错误:‘CONTAINER::Index’之前需要‘typename’,因为‘CONTAINER’是一个有依赖的作用域

    错误信息似乎比vs2008更清楚一些

    最初的代码来自EST speech tools 开源项目, 当初此项目应该是编译通过了,否则也不会发出来,但那时是如何编译的,还不知道。

  • 相关阅读:
    mysql 约束条件介绍
    mysql 约束条件目录
    mysql 日期类型
    mysql float 浮点型
    mysql int 整数类型 解释显示宽度 和 存储宽度
    mysql 整数类型 数值类型 tinyint
    【洛谷P4096】Eden 的博弈树
    【GMOJ6824】英雄联盟
    【GMOJ6826】隔膜
    【POJ 2420】A Star not a Tree?
  • 原文地址:https://www.cnblogs.com/lthxk-yl/p/3374352.html
Copyright © 2011-2022 走看看