编译在声明变量时由于-Wfatal-errors而终止

时间:2013-12-27 00:47:46

标签: c++ pointers linked-list stack

我正在尝试实现一个包含多个较小堆栈的堆栈程序。例如: -

| .. |
| .. |
| .. | | .. | | .. | | .. |
| .. | = | .. | + | .. | + | .. |
| .. |
| .. |

用语言假设我希望实现一个1000的堆栈。我将使用10个大小为100的堆栈。

就像我有一个固定大小的堆栈一样,如果需要一个更大的堆栈,就会创建另一个更小的堆栈。

我写了以下代码 -

#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导致的编译终止错误” 在以下代码行 -

int size = 0 ;

提前完成Thanx如果你能解决错误。

以下是错误详情 - enter image description here

1 个答案:

答案 0 :(得分:0)

您在C ++ 11中所做的事情是可能的,但不是早期版本。如果您的编译器支持它,您可以将-Wc++11-extensions添加到编译标志。

否则,按@cHao所述,并在构造函数或构造函数初始化列表中将值初始化为0

class multiStack{
    public:
      Node *head;
      int size;

      multiStack() : head(0), size(0) { }

    // the rest of your class
};

您还需要初始化我在上面显示的head