在stack.h中,我有两个结构,Stack和StackElement。在StackElement中,我有一个指向下一个和一个值的指针。所以,我想,我的值可能是所有类型,例如char的堆栈,双打堆栈等等。所以,我使用了模板,但是有一个错误“使用类模板'StackElement'需要模板参数” 。这是代码:
#pragma once
template <typename T>
struct StackElement
{
T value;
StackElement *next;
};
struct Stack
{
StackElement *top;
};
Stack *createStack();
void push(Stack *stack, char value);
char pop(Stack *stack);
void deleteStack(Stack *stack);
bool isEmpty(Stack *stack);
char check(Stack *stack);
此外,在上面的所有函数中,我都有相同的错误,其中StackElement的值为:
#include "stack.h"
template <typename T>
StackElement *createStackElement(T value, StackElement *next)
{
StackElement *newStackElement = new StackElement;
newStackElement->next = next;
newStackElement->value = value;
return newStackElement;
}
Stack *createStack()
{
Stack *newStack = new Stack;
newStack->top = createStackElement(0, nullptr);
return newStack;
}
void push(Stack *stack, T value)
{
StackElement *newElement = createStackElement(value, stack->top->next);
stack->top->next = newElement;
}
char check(Stack *stack)
{
return stack->top->next->value;
}
char pop(Stack *stack)
{
char result = stack->top->next->value;
StackElement *element = stack->top->next;
stack->top->next = stack->top->next->next;
delete element;
return result;
}
bool isEmpty(Stack *stack)
{
return stack->top->next == nullptr;
}
void deleteStack(Stack *stack)
{
while (!isEmpty(stack))
pop(stack);
delete stack->top;
delete stack;
}
请帮我弄清楚错误在哪里。 提前谢谢。
答案 0 :(得分:1)
您的StackElement
课程是模板,但Stack
不是。将Stack
定义更改为
template <typename T>
struct Stack
{
StackElement<T>* top;
};
然后从那里开始。
答案 1 :(得分:0)
您应该像这样指定StackElement
的类型:
struct Stack
{
StackElement<char> *top;
};
答案 2 :(得分:0)
尝试:
template <typename T>
struct StackElement
{
T value;
StackElement<T> *next;
};
template <typename T>
struct Stack
{
StackElement<T> *top;
};
但话又说回来,你真的需要两节课吗?它是一个链表。链表与其头部同义。