构造函数定义C ++

时间:2018-02-20 18:48:25

标签: c++ constructor

我在C ++中使用了以下类:

class IntStack
{
    private:
        int *stackArray;
        int stackSize;
        int top;

    public:
        IntStack(int);          // Constructor
        // rest of the 
        // member function
};  

我已经将类外的构造函数定义为:

IntStack::IntStack(int size)
{
    stackArray = new int[size];
    stackSize = size;
    top = -1;
}

这里的错误是:initializing argument 1 of 'IntStack::IntStack(int)

我已经创建了同一个类的实例:

cout << endl << "Enter size of Stack: ";
cin  >> stackCapacity;
IntStack stack = new IntStack(stackCapacity);

这里的错误是:invalid conversion from 'IntStack*' to 'int' [-fpermissive]

如何理清这些错误?

3 个答案:

答案 0 :(得分:6)

new IntStack(stackCapacity);正在为堆上的IntStack分配空间并返回指向新分配的内存的指针。您试图将此指针放入IntStack变量。

stack更改为指针:

IntStack *stack = new IntStack(stackCapacity);

或者不在堆上分配内存:

IntStack stack(stackCapacity);

答案 1 :(得分:2)

您可以像在课外一样定义constructor。但问题出现在下面的语句中,您尝试从stackheap分配内存。

IntStack stack = new IntStack(stackCapacity); /* stack should be of pointer type */

应该是

IntStack *stack = new IntStack (stackCapacity);

答案 2 :(得分:-5)

在构造函数中添加explicit关键字。我认为它试图将你的参数转换为实例类对象来进行复制构建。