【问题标题】:Compilation Terminated due to -Wfatal-errors while declaring variable声明变量时由于 -Wfatal-errors 导致编译终止
【发布时间】:2026-02-16 20:10:01
【问题描述】:

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

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

换句话说,假设我希望实现一个大小为 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 ;

如果您能解决错误,请提前感谢。

以下是错误详情 -

【问题讨论】:

  • 那么,什么是“致命错误?”
  • 当编写代码并且编译器错误地将其与某些父函数或括号相关联时。示例:- 如果您正在编写 if else if(x>y) x++;是++;否则{ y++;这将提示一个致命错误,否则它不属于任何 if
  • 尝试在类中说int size;,然后添加一个将其设置为0的构造函数。
  • @nabia 我已经用程序错误的快照更新了问题。在问题中查看。
  • 你不能在类定义中初始化这个数据成员(C++11之前)-*.com/questions/15451840/…

标签: c++ pointers linked-list stack


【解决方案1】:

您正在做的事情在 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,我已经在上面展示了。

【讨论】:

  • 谢谢。 .我确实实现了构造函数并尝试使用编译器标志来做同样的事情。但问题是我正在使用 codepad.org 进行编译。
  • 在构造函数中初始化它应该可以工作。我更新了代码以解决 codepad.org 生成的警告。您仍然有Node 有一个私有构造函数的问题,但这很容易解决(或打开另一个问题)。