c ++构造函数 - 如何在没有新的情况下启动?

时间:2015-11-14 05:20:58

标签: c++ constructor

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

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

当我编译它时,我收到错误,&#34;错误:预期的类成员或基类名称。&#34;为什么我没有空构造函数? (我使用的是clang-600.0.56)

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

是否有关于如何构建这样的类的指南?我的意思是,我应该使用两个指针来代替堆栈吗?如果我使用了指针,我会使用new关键字启动。哪种方式更受欢迎?

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

2 个答案:

答案 0 :(得分:5)

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

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

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

{

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

答案 1 :(得分:4)

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