0

Stack という名前のクラスから継承するクラス (Queue) があります。こんなふうになります:

template <class T> class Stack
{
         public:
                virtual const T pop();
                 LinkedList<T> lst;
};

template <class T> class Queue : public Stack<T>
{
         public:
                virtual const T pop();
};

template <class T> const T Queue<T>::pop()
{
                             const T val = lst[0];
                             return val;
}

コンパイラは「lst undeclared」と言います...なぜですか?

4

2 に答える 2

5

は、依存型であるlst基本クラスのメンバーであるためです。テンプレートが完全にインスタンス化されるまで、コンパイラは依存型をチェックできません。を記述して、そのような基本クラスの一部であることをコンパイラに知らせる必要があります。Stack<T>TlstStack<T>::lst

コメントで言及されているようにthis->lst、実行可能な解決策でもあります。ただし、人々はthis不必要に見えると削除する可能性があります。Stack<T>::lstこのように、より明確に見えます。

于 2011-10-26T20:26:19.520 に答える
0

this->lstの代わりに試してくださいlst

于 2011-10-26T20:30:27.513 に答える