cpp - 模板范围错误?

时间:2017-03-15 05:11:01

标签: c++ templates scope stack

我正在尝试使用模板在数组中实现基本堆栈。基于用户输入,形成优选堆栈类型。但是在编译时,在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;
}

1 个答案:

答案 0 :(得分:1)

if(stack_type == 1)
   Stack<char, 10> s; // 10 chars

相当于:

if(stack_type == 1)
{
   Stack<char, 10> s; // 10 chars
}

s当然不在以下行的范围内。

我无法提出修正建议,因为您尚未解释您希望在您的计划中实现的目标。