我有節點,它是一個帶鏈接列表的模板。我想在我的餐廳項目中創建一個項目使用節點列表,如鏈接列表與參考計數器,特殊繼承飲料和食用。一個bevrage和食物從項目繼承。 我有一個菜單,包括所有這三個類的菜,我需要改變或添加與我的經理菜。我遇到了一個問題,因爲我無法將這個類從node<Item>*
轉換爲基類。從類轉換模板從類繼承基類到基地
我想使用功能addNewtItem()
;從這個類
#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 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
調用節點類的鏈接列表
我想要使用此功能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
在這個問題上有JavaScript嗎? – evolutionxbox
問題是什麼? 「不起作用」不足以幫助您:是否有編譯器錯誤消息?運行時期間的不恰當行爲?如果是這樣,你會得到什麼樣的行爲和行爲? – Garf365