Tutorial :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, like this

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

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



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



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.

    Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
    Next Post »