模板类中的嵌套结构类型

时间:2010-08-06 14:59:31

标签: c++

template <typename vec1, typename vec2>
class fakevector
{
    public:
       /* Do something */
};



template <class A>
class caller
{
    public:

    struct typeList
    {
        struct typeOne
        {
            //...
        };
    };

    typedef fakevector<typeList::typeOne,int> __methodList;  /* This will trigger compile error */

};

我收到的错误消息是:

  1. 错误:类型/值不匹配 模板参数中的参数1 'template class fakevector'的列表

  2. 错误:期望一个类型,得到'caller :: typeList :: typeOne'

    如果模板从调用者类中移除,则会报告无错误, 像这样

    班级来电者 {     上市:        struct typeList        {.... };

  3. 我不知道原因。非常感谢你!

3 个答案:

答案 0 :(得分:3)

尝试:

 typedef fakevector<typename typeList::typeOne,int> __methodList;

http://www.comeaucomputing.com/techtalk/templates/#typename

答案 1 :(得分:2)

看起来编译器不确定typeOne是什么。

typedef fakevector<typename typeList::typeOne,int> 

应编译

答案 2 :(得分:1)

尝试typedef fakevector<typename typeList::typeOne,int>

名称

时需要名称的typename前缀

  • 出现在模板中
  • 合格
  • 未在基类规范列表中或在引入构造函数定义的成员初始值设定项列表中使用
  • 依赖于模板参数
  • 此外,除非至少前三个条件成立,否则不允许使用typename前缀。