这是我的代码
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作为嵌套结构。
谢谢,抱歉我的英语。
答案 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;
}