Я пытаюсь реализовать программу Stack, которая состоит из нескольких меньших стеков. Например, например:
|.. |
|.. |
|.. | |.. | |.. | |.. |
|.. | = |.. | + |.. | + |.. |
|.. |
|.. |
В словах предположим, что я хочу реализовать стек размером 1000. Я буду использовать 10 стеков размером 100 каждый.
Как и у меня есть фиксированный размер стека, и в случае, если требуется стек большего размера, создается другой более мелкий стек.
Я написал следующее code-
#include<iostream>
#define MAX 2
using namespace std;
class Node{
int data;
Node *next;
Node(int d){
data = d;
next = NULL;
}
};
Node *n = NULL;
class multiStack{
public:
Node *head;
int size = 0;
void push(int d){
if(size < MAX){
if( head == NULL){
head = new Node(d);
}else{
Node *p = new Node(d);
p->next = head;
head = p;
}
n = head;
size++;
}else{
multiStack Sprime;
Sprime.head->next = n;
Sprime.push(d);
}
}
void print(){
Node *p;
p = n;
while (p!=null){
cout<<p->data<<" ";
p = p->next;
}
}
};
int main(){
multiStack s;
s.push(2);
s.push(1);
s.push(4);
s.print();
return 0;
}
Компилятор codepad.org дает "Ошибка завершения компиляции из-за -Wfatal-errors" в следующей строке code-
int size = 0 ;
Thanx заранее Если бы вы могли решить эту ошибку.
Ниже приведены сведения об ошибке -
То, что вы делаете, возможно в С++ 11, но не в более ранних версиях. Если ваш компилятор поддерживает его, вы можете добавить -Wc++11-extensions
для своих флагов компиляции.
В противном случае выполните, как @cHao, и инициализируйте значение 0
в конструкторе или списке инициализации конструктора.
class multiStack{
public:
Node *head;
int size;
multiStack() : head(0), size(0) { }
// the rest of your class
};
Вам также нужно инициализировать head
, которую я показал выше.
Node
есть приватный конструктор, но это легко исправить (или открыть другой вопрос).