Q:

C++ new instance of nested class

Here is my code
template <typename T>
struct Item
{
    T* Product;
    Item *next;

    Item(T*);
};

template <typename T>
Item<T>::Item(T *prod)
{
    this->Product = prod;
    this->next = nullptr;
}

template <typename T>
class Catalog
{
private:
    Item<T> *first;
    Item<T> *last;
    unsigned int count;
public:
    struct Item;  //i need Item as nested structure

    void Add(T*);
};

template <typename T>
void Catalog<T>::Add(T *ptr)
{
    //only for simplification, algorithm I already have

    this->first = new Item<T>(ptr);
    //or
    this->last = new Item<T>(ptr);

}

I do not know how add new Item to my class Catalog. If Item is not nested struct, I can use simply new Item<T>(ptr)
Is any way how to do this?? It is my project to school and I need Item as nested struct.
Thank you, sorry about my English.

A:

The problem is that you're declaring two different Item.  The
first is a non-nested template struct, which you (probably)
don't want to use, and the second is an incomplete nessted
struct.  The second is the one you probably want to use, but
it is incomplete, so you cannot create an instance of it.  What
you should do is put the entire definition of the Item in the
class Catalog, instead of just the forward definition.  (And
don't define it there as a template: the type you want is
Catalog<T>::Item, and not Catalog<T>:Item<U>.)  Then, of
course, inside the class template, it is new Item (and not new
Item<T>); outside the class, it is new Catalog<T>::Item. 

