c++ - Conversion in template from Classes inherit a base class to base -


i have node template link list. want create in restaurant project list of item use node linked list reference counter, special inherit beverage , edible. bevrage , edible inherit item. have menu have dishes include 3 class , need change or add dish manager. problem because can't convert class base node<item>*.

i want use function 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 

call class

#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 

this node class link list

i want use function operator node<newtype>() conversion doesn't work

#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         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 

i don't know if it's problem you're looking but... it's problem.

look @ method menue::addnewitem()

    void addnewtitem(node<item>&  nextnode)   {if(_head)    _head->addnode(nextnode);   else _head=nextnode;} 

i don't know item _head pointer node<item>. , node::addnode() receive node<t> (node<item>, in case) pointer. nextnode reference node<item>, not pointer node<item>

so, when write

_head->addnode(nextnode); 

you're trying pass node<item> method expect pointer node<item>; , when write

_head = nextnode; 

you're trying assign node<item> variable of type pointer node<item>.

your intention was

_head->addnode(&nextnode); _head = & nextnode; 

?


Comments

Popular posts from this blog

javascript - Laravel datatable invalid JSON response -

java - Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; -

sql server 2008 - My Sql Code Get An Error Of Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value '8:45 AM' to data type int -