こんにちは、私はこれを適切にタイトルする方法を知らなかった。私が持っているクエリは、私が作ったスタックの実装です。コードで私はthis-> push()またはthis-> pop()を使うことができますが、スコープ演算子は必要です(stack :: push)。私は理解できませんなぜですか?スタッククラスから継承
#include <iostream>
#include <stack>
template <class T >
class SpecialStack : std::stack<T>
{
public:
SpecialStack() : isEmpty(true) {};
void push(T element)
{
if (!isEmpty)
{
T LastMin = min_stack.top();
if (element < LastMin)
{
min_stack.push(element);
}
else
{
min_stack.push(LastMin);
}
}else
{
min_stack.push(element);
}
stack::push(element); // works
//this->push(element); // Unhandled Exception
}
T pop()
{
min_stack.pop();
T out = stack::top();
stack::pop();
return out;
}
T getMin()
{
return min_stack.top();
}
private:
std::stack<T> min_stack;
bool isEmpty;
};
int main()
{
SpecialStack<int> s;
s.push(3);
s.push(2);
s.push(1);
s.push(5);
s.push(6);
//cout << s.getMin() << endl;
s.pop();
s.pop();
s.pop();
std::cout << s.getMin() << std::endl;
system("pause");
}
"is-a"または "has-a"スタックのクラスですか?私はあなたがstd :: stackから継承したいとは思っていませんし、std :: stack型のメンバーを持っています。 –
エラーメッセージは何ですか?あなたの 'isEmpty'は決してfalseに更新されません。 – yd1
投稿したコードはコンパイルされません。 – Galik