C++ 使用头文件中的类变量时存在误解
另外,要明确的是,我们没有提供驱动程序软件。他们将根据自己的材料进行评估,因此我们必须编写自己的驱动程序软件来测试我们的功能。因此缺少任何主实现。是的,C++ 使用头文件中的类变量时存在误解,c++,class,header-files,C++,Class,Header Files,另外,要明确的是,我们没有提供驱动程序软件。他们将根据自己的材料进行评估,因此我们必须编写自己的驱动程序软件来测试我们的功能。因此缺少任何主实现。是的,TodoStackArray::TodoStackArray()确实是类的默认构造函数 与任何默认构造函数一样,您应该如何使用它: 如果我创建了一个新的TodoStackArray,类成员应该如何初始化 答案取决于类在初始状态下的外观 在您的情况下,“默认情况下”堆栈是空的。将stackTop设置为-1不是一个坏主意,其余的实现与此一致(stac
TodoStackArray::TodoStackArray()
确实是类的默认构造函数
与任何默认构造函数一样,您应该如何使用它:
如果我创建了一个新的TodoStackArray
,类成员应该如何初始化
答案取决于类在初始状态下的外观
在您的情况下,“默认情况下”堆栈是空的。将stackTop
设置为-1不是一个坏主意,其余的实现与此一致(stackTop==-1
显然意味着“空堆栈”)
构造函数中发生的奇怪事情是:
TodoStackArray::TodoStackArray() //This, unsurprisingly, produces an error.
{
stackTop = -1;
stack[stackTop];
}
bool TodoStackArray::isEmpty()
{
return (stackTop == -1);
}
TodoItem* TodoStackArray::peek()
{
if(stackTop ==-1)
{
cout<< "Stack empty, cannot peak."<<endl;
}
else
{
return(stack[stackTop]);
}
}
bool TodoStackArray::isFull()
{
return(stackTop == 4);
}
void TodoStackArray::push(std::string todoItem)
{
if(stackTop >= 5)
{
cout<<"Stack full, cannot add new todo item."<<endl;
}
else
{
stack[stackTop++];
stack[stackTop]->todo = todoItem;
}
}
void TodoStackArray::pop()
{
if(stackTop == -1)
{
cout<<"Stack empty, cannot pop an item."<<endl;
}
else
{
stackTop--;
}
}
根据你的说法,这条路线的目的是什么?您正在以负指数读取数组中的值,我们都知道这类事情永远不会有好的结局
构造函数用于初始化数据。在这里,您正在读取未在不存在的索引处初始化的内容。没有多大意义,是吗?:)
只要摆脱这条线,你就可以继续前进了。下面是一个等效的实现,使用(被认为更好):
玩得开心 通过快速阅读,我可以看到你正在做
stack[stackTop]代码>等于堆栈[-1]代码>。你想用那个指令做什么?我收到了一个错误,大致如下:;“构造函数的返回类型规范无效”@8:30,头文件中的无效TodoStackArray::TodoStackArray()TodoStackArray()。这应该是一个基本构造函数吗?我应该将它用于任何事情吗??TodoStackArray()是用于初始化类实例的构造函数。您可以在此处使用它初始化类成员。@c.bear我只是在尝试初始化TodoStackArray()中的变量,因为我相信我需要引用它,但不确定引用到什么程度。我的逻辑是这样的:我在推堆栈或偷看堆栈的任何位置引用堆栈,并且不需要像头文件中声明的那样做任何进一步的操作。但是,我确信有必要使用“TodoStackArray”执行某些操作“我只是不清楚是什么。不要在代码中使用数字4
和5
,请使用MAX\u STACK\u SIZE-1
和MAX\u STACK\u SIZE
。
TodoStackArray::TodoStackArray() //This, unsurprisingly, produces an error.
{
stackTop = -1;
stack[stackTop];
}
bool TodoStackArray::isEmpty()
{
return (stackTop == -1);
}
TodoItem* TodoStackArray::peek()
{
if(stackTop ==-1)
{
cout<< "Stack empty, cannot peak."<<endl;
}
else
{
return(stack[stackTop]);
}
}
bool TodoStackArray::isFull()
{
return(stackTop == 4);
}
void TodoStackArray::push(std::string todoItem)
{
if(stackTop >= 5)
{
cout<<"Stack full, cannot add new todo item."<<endl;
}
else
{
stack[stackTop++];
stack[stackTop]->todo = todoItem;
}
}
void TodoStackArray::pop()
{
if(stackTop == -1)
{
cout<<"Stack empty, cannot pop an item."<<endl;
}
else
{
stackTop--;
}
}
stack[stackTop];
TodoStackArray::TodoStackArray() : stackTop(-1)
{
// notice: no body required here
}