Прошло много времени с тех пор, как я в последний раз писал код на C ++, но в настоящее время я застрял с проблемой, которую я не могу понять ... Рассмотрим следующий код
#include <stack>
#include <iostream>
class test{
private:
std::stack<int> member;
public:
test(std::stack<int> u){
while(!u.empty()){
member.push(u.top());
u.pop();
}
}
int top_from_member(void){
return member.top();
}
void pop_from_member(void){
member.pop();
}
};
int main(){
std::stack<int> a;
a.push(1);
a.push(2);
test b = test(a);
std::cout << b.top_from_member() <<"\n";
b.pop_from_member();
std::cout << b.top_from_member() <<"\n";
return 0;
}
Iтолько что написал класс, который имеет закрытый член типа stack
и написал функции для получения верхнего значения и извлечения значения. Это работает так, как я надеялся. Теперь рассмотрим в сравнении с ним следующий код
#include <stack>
#include <iostream>
class test{
private:
std::stack<int> member;
public:
test(std::stack<int> u){
while(!u.empty()){
member.push(u.top());
u.pop();
}
}
int top_from_member(void){
return member.top();
}
void pop_from_member(void){
member.pop();
}
};
class test2{
private:
test member2;
public:
test2 (test v) : member2(v){}
test get_stack(void) const {
return this->member2;
}
};
int main(){
std::stack<int> a;
a.push(1);
a.push(2);
test2 b = test2(a);
std::cout << b.get_stack().top_from_member() <<"\n";
b.get_stack().pop_from_member();
std::cout << b.get_stack().top_from_member() <<"\n";
return 0;
}
Единственное отличие состоит в том, что у меня теперь есть второй класс, который имеет закрытый член типа test
. Я написал функцию get_stack
для возможности превышения стека от test::member
, а затем снова использовал top_from_member
и pop_from_member
. Кажется, что top_from_member
работает просто отлично, но pop_from_member
ничего не делает. Может кто-нибудь объяснить, почему и как мне нужно изменить pop_from_member
, чтобы заставить это работать?