私はコード内のエラーを見つけることは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を初期化しようとすると私は何を間違っていますか?
[mcve]を作成し、エラー全体をそのまま貼り付けてください –