2017-11-21 12 views
-1

私はコード内のエラーを見つけることはStackOverflowで行われているものではないことを知っていますが、私は今は完全に無駄な解決策を探していたので本当に必死であるので、テンプレートクラスからオブジェクトを初期化するときのエラー。クラステンプレートのインスタンス化への参照を参照してください

自分自身のスタッククラス(リンクリストとして)を実装するタスクがあります。その部分に問題はありません。ここに私のコードです

template<typename T> 
struct node { 
T inf; 
node* link; 
}; 

template <typename T> 
class myStack { 
private: 
node<T> *start;  //Decalration of class myStack. I've left only the default constructor. 
public: 
myStack(); 
} 

template<typename T> 
myStack<T>::myStack() { 
start = NULL; 
} 

すべてが意図したとおりに動作します。タスクの次の部分は、2つのスタックを使用してキューを実装することです。基本的にエンキューするとは、要素を最初のスタックにプッシュし、すべての要素を最初のスタックから2番目のスタックに転送してから、1番目のスタックをポップすることをデキューすることです。キューの

実装:私はクラスキューからオブジェクトを初期化しようとすると、

template<class T> 
class QueueStacks { 
myStack<T> stack1; 
myStack<T> stack2; 

public: 
QueueStacks(); 
void enqueue(T&); 
T& dequeue(); 
void print(); 
}; 

template<typename T> 
QueueStacks<T>::QueueStacks() { //No need I believe, for default constructor, but I left it for clarity purposes 
} 


template<typename T> 
void QueueStacks<T>::enqueue(T& obj) { 
if (stack1.empty()) { 
    transferTwoToOne();    //Function transferTwoToOne works as intended, so I didn't deem it necessary to include include its implementation 
} 
else { 
    stack1.push();   //void myStack::push() works as intended, so I deliberately left out its implmentation 
} 
} 

template<typename T> 
T& QueueStacks<T>::dequeue() { 
T x; 
if (stack1.empty() && stack2.empty()) { 
    cout << "Attempt to pop from an empty stack"; 
} 
else { 
    if (stack2.empty()) { 
     transferOneToTwo();     //Same for function transferOneToTwo 
     stack2.pop(x); 
    } 
    else 
     stack2.pop(x);   //same for pop 
    return x; 
} 
} 

template<typename T> 
void QueueStacks<T>::print() { 
T x; 
if (stack2.empty()) { 
    transferOneToTwo(); 
} 
while (!stack2.empty()) { 
    stack2.pop(x); 
    cout << x << " "; 
} 
} 

エラーが付属しています。例:class template instantiation 'QueueStacks'がコンパイルされていることを参照してください。私は3つのエラーがあります:

obj1を初期化しようとすると私は何を間違っていますか?

+1

[mcve]を作成し、エラー全体をそのまま貼り付けてください –

答えて

0

obj1pushを呼び出すためには、QueueStacks<int>pushメンバ関数を持っている必要があります。

enqueueを呼び出しましたか?

+0

はい、私はそれを意味しました。しかし、それはどこから来たのかではない。私の元のコードでは、エンキューファンクションはプッシュと呼ばれ、スタック内のプッシュとキューを区別するためにこのポストを作成するときにエンキューするように変更しました。 – Play4u

+0

私はタイプミスを修正して#includeディレクティブを追加した後、最小限で完全で検証可能な例を作成し、エラー全体をそのまま貼り付けてください。 – Eljay

+0

それを見つけました。関数のエンキューでは、stack1push()に引数を渡すことはありません。 – Play4u

関連する問題