我在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]
如何理清这些错误?
答案 0 :(得分:6)
new IntStack(stackCapacity);
正在为堆上的IntStack
分配空间并返回指向新分配的内存的指针。您试图将此指针放入IntStack
变量。
将stack
更改为指针:
IntStack *stack = new IntStack(stackCapacity);
或者不在堆上分配内存:
IntStack stack(stackCapacity);
答案 1 :(得分:2)
您可以像在课外一样定义constructor
。但问题出现在下面的语句中,您尝试从stack
为heap
分配内存。
IntStack stack = new IntStack(stackCapacity); /* stack should be of pointer type */
应该是
IntStack *stack = new IntStack (stackCapacity);
答案 2 :(得分:-5)
在构造函数中添加explicit
关键字。我认为它试图将你的参数转换为实例类对象来进行复制构建。