C++ 模板中从类到基类的转换将继承基类到基类

C++ 模板中从类到基类的转换将继承基类到基类,c++,C++,我有一个节点,它是一个带有链接列表的模板。我想在我的餐厅项目中创建一个项目使用节点列表,如带有参考计数器的链表、特殊饮料和食用食品。从物品中继承的一种食物。 我有一份菜单,菜单上的菜包括这三门课的所有菜,我需要和我的经理一起更改或添加菜。我遇到了一个问题,因为我无法将类从节点*转换为基类 我想使用函数addNewItem() \ifndef菜单 #定义菜单 #包括“Node.h” 类菜单 { 公众: Menue(); 节点*头; 作废删除项(节点*项); 节点*getItem(int i); v

我有一个节点,它是一个带有链接列表的模板。我想在我的餐厅项目中创建一个项目使用节点列表,如带有参考计数器的链表、特殊饮料和食用食品。从物品中继承的一种食物。 我有一份菜单,菜单上的菜包括这三门课的所有菜,我需要和我的经理一起更改或添加菜。我遇到了一个问题,因为我无法将类从
节点*
转换为基类

我想使用函数
addNewItem()

\ifndef菜单
#定义菜单
#包括“Node.h”
类菜单
{
公众:
Menue();
节点*头;
作废删除项(节点*项);
节点*getItem(int i);
void addnewitem(Node&nextNode){if(_head)_head->addNode(nextNode);else _head=nextNode;}
void printMenue();
无效删除项(int i);
~Menue();
受保护的:
私人:
};
#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
\ifndef MENEGER\H
#定义菜单
#包括“Node.h”
#包括“服务员,h”
#包括“Menue.h”
班长:公共服务生
{
公众:
Meneger();
~Meneger();
void editItem(节点和newItem){u myMenue->addnewItem(newItem);}
void editItem(节点和newItem){u myMenue->addnewItem(newItem);}
void editItem(节点和newItem){u myMenue->addnewItem(newItem);}
受保护的:
私人:
可计算的整数;
国际威特里德;
表*\u表;
菜单*\u myMenue;
};
#endif//MENEGER_H
这是带有链接列表的节点类

我想使用此函数
operator Node()
,但转换不起作用

#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
\ifndef节点
#定义节点
#包括“项目h”
#包括“可食用的.h”
#包括“饮料.h”
#包括“Special.h”
模板
类节点
{
公众:
T*_项;
节点*\u下一步;
国际参考计数;
Node():_next(NULL),_refCount(0),_item(NULL){}
节点(T*item=0,Node*next=0):\u next(next),\u item(item),\u refCount(1){}
~Node(){if(_item)delete _item;_item=NULL;}
运算符*(){return*_item;}
T*运算符->(){return\u item;}
void addRefCount(){u refCount++;}
void addNode(节点*newItem);
int removietem(){return--\u refCount;}
模板//模板函数
运算符节点()//隐式转换操作。
{
返回节点(_项);
}
私人:
};
模板
内联void节点::addNode(节点*newItem)
{
if(newItem==NULL)
返回;
newItem->\u next=\u next;
_下一步=新项目;
}
#endif//NODE_H

我不知道这是否是您正在寻找的问题,但是。。。这是个问题

查看方法
Menue::addNewItem()

您正试图将
节点
传递给一个方法,该方法期望指针指向
节点
;当你写作的时候

_head->addNode(nextNode);
_head = nextNode;
您正试图将
节点
分配给指针类型的变量分配给
节点

你的意图是

_head->addNode(&nextNode);
_head = & nextNode;

这个问题中有JavaScript吗?问题是什么?“不工作”不足以帮助您:是否有编译器错误消息?运行时的不当行为?如果是这样,你想要的行为和得到的行为是什么?
_head = nextNode;
_head->addNode(&nextNode);
_head = & nextNode;