E2111 Type 'typename' may not be defined here (C++)
Class and enumeration types may not be defined in a function return type, a function argument type, a conversion operator type, or the type specified in a cast.
You must define the given type before using it in one of these contexts.
Note:This error message is often the result of a missing semicolon (;) for a class declaration. You might want to verify that all the class declarations preceding the line on which the error occurred end with a semicolon.