我正在尝试使用模板在数组中实现基本堆栈。基于用户输入,形成优选堆栈类型。但是在编译时,在if条件中检查stack_type之后,它会给出一个错误“s未在此范围中声明”。如果注释了条件检查,则不显示任何错误。有人会介意解释为什么会出现这个错误吗?
#include<iostream>
using namespace std;
template < class Typ, int MaxStack >
class Stack {
Typ items[MaxStack];
int EmptyStack;
int top;
public:
Stack();
~Stack();
void push(Typ);
Typ pop();
int empty();
int full();
};
template < class Typ, int MaxStack >
Stack< Typ, MaxStack >::Stack() {
EmptyStack = -1;
top = EmptyStack;
}
template < class Typ, int MaxStack >
Stack< Typ, MaxStack >::~Stack() {
delete []items;
}
template < class Typ, int MaxStack >
void Stack< Typ, MaxStack >::push(Typ c) {
items[ ++top ] = c;
}
template < class Typ, int MaxStack >
Typ Stack< Typ, MaxStack >::pop() {
return items[ top-- ];
}
template< class Typ, int MaxStack >
int Stack< Typ, MaxStack >::full() {
return top + 1 == MaxStack;
}
template< class Typ, int MaxStack >
int Stack< Typ, MaxStack >::empty() {
return top == EmptyStack;
}
int main(void) {
int stack_type;
char ch;
cout << "Enter stack type: \n\t1.\tcharater stack\n\t2.\tInteger stack\n\t3.\tFloat stack\n";
cin >> stack_type;
if(stack_type == 1)
Stack<char, 10> s; // 10 chars
/* if(stack_type == 2)
Stack<int, 10> s; // 10 integers
if(stack_type == 3)
Stack<float, 10> s; // 10 double*/
while ((ch = cin.get()) != '\n')
if (!s.full())
s.push(ch);
while (!s.empty())
cout << s.pop();
cout << endl;
return 0;
}
答案 0 :(得分:1)
if(stack_type == 1)
Stack<char, 10> s; // 10 chars
相当于:
if(stack_type == 1)
{
Stack<char, 10> s; // 10 chars
}
s
当然不在以下行的范围内。
我无法提出修正建议,因为您尚未解释您希望在您的计划中实现的目标。