非静态数据成员初始值设定项仅适用于 和动态内存

Non-static data member initializers only available with and dynamic memory

本文关键字:适用于 内存 动态 数据成员 静态      更新时间:2023-10-16

我有2个问题。

第一:

警告:非静态数据成员初始值设定项仅适用于 -std=C++11 或 -std=GNU++11

第二:

如何将此代码转换为具有动态内存的代码?

#include iostream
#include stdio.h
#include stdlib.h
#include time.h
using namespace std;
#define MAX 20
class tStack{    
    int STACK[MAX];
    int sizee=0;
    public:
    bool empty(){
        return sizee==0;
    }
    int val(){
        if (sizee==0) throw "Stack is empty";
        return STACK[sizee];
    }
    int pop(){
        if (sizee==0) throw "Stack is empty";
        return STACK[sizee--];
    }
    void push(int co){
        if (sizee==MAX-1) throw "Stack is full";
        sizee++;
        STACK[sizee]=co;
    }
    void writeTop(){
        cout<<val()<<endl;
    }};
int main(){    
    tStack stack;
    try{
        stack.push(4);
        stack.push(8);
        stack.push(5);
        cout<<endl;
        cout<<stack.pop()<<endl;
        cout<<stack.pop()<<endl;
        cout<<stack.pop()<<endl;
        cout<<stack.pop()<<endl;
    }catch (const char *msg){
        cout<<"exception: "<<msg<<endl;
    }
    return 0;
}

如何将此代码转换为具有动态内存的代码?

我猜你的意思是用动态容器替换固定大小的数组int STACK[MAX];

使用std::vector

std::vector<int> stack

其余的你应该自己弄清楚。

此外,C++标准库也有一个堆栈容器适配器,但我假设您需要出于教育目的创建自己的容器适配器。

对于警告,您可以在以下代码块中检查 -std=c++11 标志: 设置 -> 编译器 并选中Have g++ follow the C++11 ISO C++ language standard选项。

对于动态内存,必须使用 malloc/calloc 或 new 来分配内存。为您的堆栈创建一个结构,类似于 struct elem { int info, struct elem *previous}; 当你必须推送某些东西时,为新元素分配内存,向堆栈添加值并将最后一个值链接到新值。

newElem = new elem; elem -> info = info; elem -> previous = topOfTheStack; 现在 topofTheStack newElem,所以topOfTheStack = newElem ;