c++如何在没有新的情况下启动

c++ How to initiate without new?

本文关键字:情况下 启动 c++      更新时间:2023-10-16

所以我试图创建一个由两个堆栈组成的类。我想为它创建一个构造函数,并且我希望堆栈中最初有0个元素:

class twoStacks {
    std::stack<int> mins;
    std::stack<int> values;
    twoStacks():
    {
    }
};

当我编译这个时,我得到一个错误,"错误:预期的类成员或基类名称。"为什么我不能有一个空的构造函数?(我用的是clang-600.0.56)

我是否首先需要一个构造函数,因为我只想启动空堆栈?当我把元素推到堆栈上时,这会引起问题吗?

有没有关于如何构建这样一个类的指导方针?我的意思是,我应该使用指向堆栈的两个指针吗?如果我使用指针,我将使用new关键字进行初始化。首选哪种方式?

例如,如果这个类有另一个成员变量/值int size,我会将其列表初始化为0。但当它是一个容器时,我该怎么办?我假设如果有对流,无论它们是堆栈、向量还是任何其他容器都是一样的(如果我错了,请纠正我)。

如果您不希望编译器向您提供错误消息,则需要编写正确的代码。

删除twoStacks()之后和{之前的冒号。

或者添加有效的初始化程序以默认构造成员

twoStacks(): mins(), values()
{
}

或者(因为编译器会为您生成一个默认构造函数,在大多数情况下,您还没有声明另一个构造函数),只需完全删除构造函数的声明和定义。

您需要删除twoStacks()之后的冒号。除非显式调用成员变量的构造函数,否则编译器将生成默认构造它们的代码。