c++构造函数-如何在没有new的情况下进行初始化?

标签 c++ constructor

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

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

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

我是否首先需要一个构造函数,因为我只想启动空堆栈?当我将元素插入堆栈时,这会导致问题吗?

是否有关于如何构建这样的类的指南?我的意思是,我应该使用两个指向堆栈的指针吗?如果我使用指针,我会使用 new 关键字启动。首选哪种方式?

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

最佳答案

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

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

或者添加有效的初始化器来默认构造成员

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

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

关于c++构造函数-如何在没有new的情况下进行初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33705397/

相关文章:

c++ - 创建一个没有复选框的弹出式 CMenu

c++ - QT中鼠标事件是如何传递给widget的

c++ - operator bool() 转换为 std::string 并与 operator std::string() 冲突

c++ - 在结构中访问 std::list 会引发段错误

c++ - 除非同时构建,否则无法在 3d map 中分配值

scala - Scala:构造函数采用Seq或varargs

c++ - ATL 中的 CImage 类

c++ - 未解析的重载函数类型

c++ - 如何为包含 shared_ptr 的类创建复制构造函数/赋值运算符? C++

c# - 我可以在 C# 中从字符串映射到构造函数吗?