我的节点是带有链接列表的模板。我想在我的餐厅项目中创建一个项目使用节点列表,如链接列表与参考计数器,特殊继承饮料和食用。项目的bevrage和食物继承。
我有一个菜单,包括所有这三个类的菜,我需要更改或添加菜与我的经理。我遇到了问题,因为我无法将类从node<Item>*
转换为基类。
我想使用函数addNewtItem()
;
#ifndef MENUE_H
#define MENUE_H
#include "Node.h"
class Menue
{
public:
Menue();
Node<Item>* _head;
void deleteItem(Node<Item>* item);
Node<Item>* getItem(int i);
void addNewtItem(Node<Item>& nextNode) {if(_head) _head->addNode(nextNode); else _head=nextNode;}
void printMenue();
void deleteItem(int i);
~Menue();
protected:
private:
};
#endif // MENUE_H
从这个班级打电话
#ifndef MENEGER_H
#define MENEGER_H
#include "Node.h"
#include "Waiter.h"
#include "Menue.h"
class Meneger: public Waiter
{
public:
Meneger();
~Meneger();
void editItem (Node<Edible>& newItem){ _myMenue->addNewtItem(newItem);}
void editItem (Node<Special>& newItem){ _myMenue->addNewtItem(newItem);}
void editItem (Node<Beverage>& newItem){ _myMenue->addNewtItem(newItem);}
protected:
private:
int _amountTable;
int _weiterId;
Table* _table;
Menue* _myMenue;
};
#endif // MENEGER_H
这是带有链接列表的节点类
我想使用此功能operator Node<newType>()
,但转换不起作用
#ifndef NODE_H
#define NODE_H
#include "Item.h"
#include "Edible.h"
#include "Beverage.h"
#include "Special.h"
template <class T>
class Node
{
public:
T* _item;
Node* _next;
int _refCount;
Node():_next(NULL),_refCount(0),_item(NULL){}
Node(T* item=0,Node<T>* next=0):_next(next),_item(item),_refCount(1){}
~Node(){ if(_item)delete _item;_item=NULL;}
T& operator* (){return *_item;}
T* operator-> (){return _item;}
void addRefCount() {_refCount++;}
void addNode(Node<T>* newItem);
int removeItem(){return --_refCount;}
template<class newType> // template function for
operator Node<newType>() // implicit conversion ops.
{
return Node<newType>(_item);
}
private:
};
template <class T>
inline void Node<T>::addNode(Node<T>* newItem)
{
if(newItem==NULL)
return;
newItem->_next=_next;
_next=newItem;
}
#endif // NODE_H
答案 0 :(得分:0)
我不知道这是你正在寻找的问题,但......这是一个问题。
查看方法Menue::addNewItem()
void addNewtItem(Node<Item>& nextNode) {if(_head) _head->addNode(nextNode); else _head=nextNode;}
我不知道什么是Item
,但_head
是指向Node<Item>
的指针。并且Node::addNode()
会收到Node<T>
(在这种情况下为Node<Item>
)指针。但是nextNode
是对Node<Item>
的引用,而不是指向Node<Item>
的指针
所以,当你写
_head->addNode(nextNode);
您试图将Node<Item>
传递给期望指针到Node<Item>
的方法;当你写作
_head = nextNode;
您正在尝试将Node<Item>
分配给指针类型的变量到Node<Item>
。
你的意图是
_head->addNode(&nextNode);
_head = & nextNode;