如何解决“使用类模板需要模板参数列表”

时间:2019-05-25 02:59:11

标签: c++

我使用模板制作了一些有关堆栈的代码。 但是现在,仍然停留在小错误上。 我尝试了很多次,但是不知道该怎么办。 另外,我看到了很多相同的错误问题,但是我的问题似乎有所不同。

我在写作中。 因此,有一些未完成的代码。 如果您发现有问题但没有导致错误,请忽略它。

#ifndef STACKINTERFACE_H
#define STACKINTERFACE_H

using namespace std;

template <typename T>
class StackInterface {
public:
    StackInterface() {};
    virtual ~StackInterface() {};
    virtual bool isEmpty() const = 0;
    virtual bool isFull() const = 0;
    virtual void push(T data) = 0;
    virtual void pop() = 0;
    virtual T top() const = 0;
};


#include "StackInterface.h"

#include <iostream>
template <typename T>
class Stack : public StackInterface {
private:
    T * items;
    const static int max = 10;
    const static int GROWBY = 5;
    size_t arrayCapacity;
    size_t numItems;
    int top_position;
public:
    Stack();
    virtual void push(T data);
    virtual T top() const;
    virtual void pop();
    virtual bool isEmpty() const;
    virtual bool isFull() const;
    size_t getArrayCapacity();
    size_t getNumItems();
    Stack<T> operator=(const Stack<T>&Other);
    ~Stack();
    Stack(const Stack<T>& other);
};

template <typename T>
Stack<T>::Stack() 
{
    items = new T[max];
    numItems = 0;
    top_position = -1;
}

template <typename T>
Stack<T>::~Stack() {
    cout << "deleting..." << endl;
    delete[] items;
}

template <typename T>
void Stack<T>::push(T data) {
    cout << "inserting" << data << endl;
    if (numItems < arrayCapacity) {
        T[++top_position] = data;
    }
    numItems++;
}
template <typename T>
void Stack<T>::pop() {
    if (isEmpty) {
        cout << "The stack is empty. Returned value not reliable.\n";
    }
    else {
        cout << "removing" << top() << endl;
        retrun T[top_position--];
    }
}

template <typename T>
bool Stack<T>::isEmpty() const
{
    if (numItems == 0) {
        return true;
    }
    else {
        return false;
    }
}

template <typename T>
bool Stack<T>::isFull() const
{
    if (numItems == max) {
        return true;
    }
    else {
        return false;
    }
}

template <typename T>
T Stack<T>::top() const
{
    if (!isEmpty()) {
        return T[top_position];
    }
    else {
        throw exception;
    }
}

template <typename T>
Stack <T> Stack<T>:: operator=(const Stack<T>&Other) {
    if (&Other == this) {
        return *this;
    }   
}

template <typename T>
Stack<T>::Stack(const Stack<T>& other) {
    items = new items(other.items);
    numItems = other.numItems;
    top_position = other.top_position;
    arrayCapacity = other.arrayCapacity;
}

template <typename T>
size_t Stack<T>::getArrayCapacity() {
    return arrayCapacity;
}

template <typename T>
size_t Stack<T>::getNumItems() {
    return numItems;
}

int main() {

    Stack <int> S1;


    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您需要为超类提供模板参数。代替这个:

template <typename T>
class Stack : public StackInterface {

执行以下操作:

template <typename T>
class Stack : public StackInterface<T> {

(您的代码还有很多其他问题,但这就是您解决所要求的特定问题的方法。)