开发者

Nested struct type in a template class

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 */

};

The error messages I got are:

  1. Error: type/value mismatch at argument 1 in template parameter list for ‘template class fakevector’

  2. Error: expected a type, got ‘caller::typeList::typeOne’

    If template is removed from the caller class, no error will be reported,开发者_StackOverflow like this

    class caller { public: struct typeList { .... };

I don't know the reason. Thank you very much!


Try:

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

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


Looks like the compiler is in doubt what typeOne is.

typedef fakevector<typename typeList::typeOne,int> 

should compile


Try typedef fakevector<typename typeList::typeOne,int>

The typename prefix to a name is required when the name

  • Appears in a template
  • Is qualified
  • Is not used as in a list of base class specifications or in a list of member initializers introducing a constructor definition
  • Is dependent on a template parameter
  • Furthermore, the typename prefix is not allowed unless at least the first three previous conditions hold.

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新问答

    问答排行榜