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
}