从模板类初始化对象时出错。请参阅类模板实例化的引用

时间:2017-11-21 12:39:40

标签: c++ stack queue

我知道在代码中发现错误不是在StackOverflow中完成的,但是我在这里发布是因为我真的很绝望,因为我一直在寻找一段时间的解决方案现在完全没有用。

我有一个实现自己的Stack类(作为链表)的任务。那个部分没问题。这是我的代码

    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;
}

一切都按预期运作。该任务的下一部分是使用两个堆栈实现队列。基本上排队意味着将元素推入第一个堆栈,并将所有元素从第一个堆栈转移到第二个堆栈,然后弹出顶层。

队列的实施:

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 << " ";
}
}

当我尝试从类队列初始化对象时出现错误。 E.g

int main()
{
QueueStacks<int> obj1;

for (int i = 0; i < 5; i++){
    obj1.push(i);
}
obj1.print();
return 0;
}

编译器显示:注意:请参阅正在编译的类模板实例化'QueueStacks'的引用。我有3个错误:

尝试初始化obj1时我做错了什么?

1 个答案:

答案 0 :(得分:0)

要在push上致电obj1QueueStacks<int>必须拥有push会员功能。

您的意思是调用enqueue吗?