2016-05-09 13 views
-1

私はリンクリストを持つテンプレートであるノードを持っています。私は私のレストランプロジェクトで、リファレンスカウンター、特別な継承飲料、食用のリンクリストなどのアイテム使用ノードのリストを作成したいと考えています。 bevrageと食べ物はアイテムから継承しています。 私にはこの3つのクラスのすべてが含まれているメニューがあり、私はマネージャーと料理を交換したり追加したりする必要があります。私は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 
を動作しません。
+2

この質問にはJavaScriptがありますか? – evolutionxbox

+2

問題は何ですか? 「うまくいきません」というのはあなたを助けるだけでは不十分です:コンパイラのエラーメッセージはありますか?実行時の不適切な動作ですか?もしそうなら、あなたが望む行動や行動は何ですか? – Garf365

答えて

0

あなたが探している問題かどうかは分かりませんが...問題です。方法Menue::addNewItem()

void addNewtItem(Node<Item>& nextNode) {if(_head) _head->addNode(nextNode); else _head=nextNode;} 

ルック私はItemあるかわからないけど_headNode<Item>へのポインタです。 Node::addNode()Node<T>(この場合はNode<Item>)のポインタを受け取ります。しかしnextNodeはあなたがにポインタを期待するメソッドにNode<Item>を渡すためにしようとしている

_head->addNode(nextNode); 

を書くときNode<Item>を参照する、だから、Node<Item>

へのポインタではなく、ありますNode<Item>;あなたは

_head = nextNode; 

を書くとき、あなたはNode<Item>へのタイプポインタの変数にNode<Item>を割り当てるしようとしています。

あなたの意思

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

でしたか?

関連する問題