C ++嵌套类的新实例

时间:2014-06-06 16:51:47

标签: c++ nested

这是我的代码

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);

}

我不知道如何将新Item添加到我的类目录中。如果Item不是嵌套结构,我只能使用new Item<T>(ptr)

有什么方法可以做到这一点?这是我上学的项目,我需要Item作为嵌套结构。

谢谢,抱歉我的英语。

2 个答案:

答案 0 :(得分:1)

问题是您要声明两个不同的Item。该 首先是一个非嵌套的模板结构,你(可能) 不想使用,第二个是不完整的nessted 结构。第二个是您可能想要使用的那个,但是 它不完整,因此您无法创建它的实例。什么 你应该做的是把Item的整个定义放在。{1}}中 类Catalog,而不仅仅是前向定义。 (和 不要在那里将其定义为模板:您想要的类型 Catalog<T>::Item,而不是Catalog<T>:Item<U>。)然后, 当然,在类模板中,它是new Item(而不是new Item<T>);在课外,它是new Catalog<T>::Item

答案 1 :(得分:0)

您必须将定义放在类的定义中:

template <typename T>
class Catalog
{
public:

    struct Item
    {
       T* Product;
       Item *next;

       Item(T*);
    };

    void Add(T*);

private:
    Item *first;
    Item *last;
    unsigned int count;
};

请注意,现在结构的类型是Catalog<T>::Item,所以在其他地方你必须使用它而不仅仅是Item<T>

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